泛型

2020-11-04  本文已影响0人  曾梦想仗剑天涯

泛型问题的引出

//定义Point类
class Point {
  private Object x;
  private Object y;
  public void setX(Object x) {
    this.x = x;
  }
  public void setY(Object y) {
    this.y = y;
  }
  public Object getX() {
    return this.x;
  }
  public Object getY() {
    return this.y;
  }
}
//然后进行内容设置
public class JavaDemo {
  public static void main(String [] args) {
    Point point = new Point();
    //第一步:根据需求进行内容设置
    point.setX(10);
    point.setY(20);
    //第二步:从里面获取数据
    int x = (Integer) point.getX();
    int y = (Integer) point.getY();
    System.out.println("x = " + x + "、y = " + y);
  }
}

泛型基本定义

class Point <T>{
  private T x;
  private T y;
  public void setX(T x) {
    this.x = x;
  }
  public void setY(T y) {
    this.y = y;
  }
  public T getX() {
    return this.x;
  }
  public T getY() {
    return this.y;
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    Point <Integer> point = new Point <Integer> ();
    //第一步:根据需求进行内容设置
    point.setX(10);
    point.setY(20);
    //第二步:从里面获取数据
    int x = point.getX();
    int y = point.getY();
    System.out.println("x = " + x + "、y = " + y);
  }
}

泛型通配符

class Message <T> {
  private T content;
  public void setContent(T content) {
    this.content = content;
  }
  public T getContent() {
    return this.content;
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    Message <String> msg = new Message <String> ();
    msg.setContent("www.mldn.com");
    fun(msg);
  }
  public static void fun(Message <String> temp) {
    System.out.println(temp.getContent());
  } 
}
public class JavaDemo {
  public static void main(String [] args) {
    Message <String> msgA = new Message <String> ();
    Message <Integer> msgB = new Message <Integer> ();
    msgA.setContent("www.baidu.com");
    fun(msgA);
    msgB.setContent(10);
    fun(msgB);
  }
  public static void fun(Message <?> temp) {
    System.out.println(temp.getContent());
  } 
}
//观察泛型的上限配置
class Message <T extends Number> {
  private T content;
  public void setContent(T content) {
    this.content = content;
  }
  public T getContent() {
    return this.content;
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    Message <Integer> msgB = new Message <Integer> ();
    msgB.setContent(10);
    fun(msgB);
  }
  public static void fun(Message <? extends Number> temp) {
    System.out.println(temp.getContent());
  } 
}
//设置泛型下限
class Message <T> {
  private T content;
  public void setContent(T content) {
    this.content = content;
  }
  public T getContent() {
    return this.content;
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    Message <String> msgB = new Message <String> ();
    msgB.setContent("www.baidu.com");
    fun(msgB);
  }    
  public static void fun(Message <? super String> temp) {
    System.out.println(temp.getContent());
  } 
}

泛型接口

//定义泛型接口
interface IMessage <T> {
  public abstract String echo(T t);
}
//实现方式一:在子类中继续设置泛型定义;
interface IMessage <T> {
  public abstract String echo(T t);
}
class MessageImpl<S> implements IMessage<S> {
  public String echo(S t) {
    return "【echo】" + t;
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    IMessage<String> msg = new MessageImpl<String>();
    System.out.println(msg.echo("www.baidu.com"));
  } 
}
//实现方式二:在子类实现父接口的时候直接定义出具体泛型类型;
interface IMessage <T> {
  public abstract String echo(T t);
}
class MessageImpl implements IMessage<String> {
  public String echo(String t) {
    return "【echo】" + t;
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    IMessage<String> msg = new MessageImpl();
    System.out.println(msg.echo("www.baidu.com"));
  } 
}

泛型方法

public class JavaDemo {
  public static void main(String [] args) {
    Integer [] num = fun(1, 2, 3);  //传入了整数,泛型类型就是Integer
    for(int temp : num) {
      System.out.println(temp);
    }
  } 
  public static <T> T [] fun(T ...args) {
    return args;
  }
}
此图来源于李兴华老师 此图来源于李兴华老师
//利用泛型改进工厂
//此程序还有问题,日后再改
interface IMessage {
  public abstract void send(String str);
}
class MessageImpl implements IMessage {
  public void send(String str) {
    System.out.println("消息发送" + str);
  }
}
class Factory {
  public static <T> T getInstance(String className) {
    if("MessageImpl".equals(className)) {
      return (T) new MessageImpl();
    }
    return null;
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    IMessage msg = Factory.getInstance("MessageImpl");
    msg.send("www.baidu.com");
    System.out.println(IMessage.class);
  }
}
上一篇 下一篇

猜你喜欢

热点阅读