VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • Java泛型

Java泛型

泛型类

即把不确定的数据元素类型用一个泛型占位符表示

@Data
public class Person<T> {
    private T name;
    private T address;
}
Person<String> person= new Person<>();
person.setName("attack204");
System.out.println(person.getName());

多类型泛型

即需要传递多个类型占位符,一个常见的应用是map

@Data
public class MyMap<K, V> {
    private K key;
    private V value;
    public void setKeyAndValue(K key, V value) {
        this.key = key;
        this.value = value;
    }
}
MyMap<String, Integer> myMap = new MyMap<>();
myMap.setKeyAndValue("attack204", 2333);
System.out.println(myMap.getKey());
System.out.println(myMap.getValue());

普通方法泛型

@Data
public class Person<T> {
    private T name;
    private T address;
    //以下两种方法都可以
    public String show(T inputName) {
        return inputName + "is showing";
    }
    public <E> String show2(E input) {
        return input + "is showing two";
    }
}
        Person<String> person = new Person<>();
        System.out.println(person.show("attack204"));
        System.out.println(person.show2("attack203"));

静态方法泛型

@Data
public class Person<T> {
    private T name;
    private T address;
    //注意,静态方法只能调用静态变量,T不是静态变量
    //因此不能写成 public static String show(T inputName) {
    public static <E> String show(E inputName) {
        return inputName + "is showing";
    }
}
System.out.println(Person.show("attack204"));

泛型接口

和上面差不多一样

  • interface
public interface PersonInt<T> {
    public String show(T name);
}
  • implement
public class PersonImpl implements PersonInt<String> {
    @Override
    public String show(String name) {
        return name + "is showing three";
    }
}

或者

public class PersonImpl<T> implements PersonInt<T> {
    @Override
    public String show(T name) {
        return name + "is showing three";
    }
}
  • main
PersonImpl person = new PersonImpl();
System.out.println(person.show("attack204"));

或者

PersonImpl<String> person = new PersonImpl<>();
System.out.println(person.show("attack204"))

擦除模式

  • 定义:java中的泛型只存在于编译阶段,在反射阶段会被擦除。

考虑这样一段代码

Person<String> p = new Person<>();
Person<Integer> p1 = new Person<>();
system.out.println(p == p1);
//true
  • 目的:为了兼容低版本的jdk
回到顶部

通配符

在泛型中不识别父子继承关系(具体见视频)

因此需要通配符<?>来解决此错误

回到顶部

上边界与下边界

用了<?>相当于此处可以是任意类型,但是有时候需要对其进行限定

<? extends T>表示只能传入T及其子类,需要读取,但不写入时使用

<? super T> 表示只能传入T及其父类,需要写入,但不读取时使用


原文:https://www.cnblogs.com/attack204/p/14490060.html
 


相关教程