java泛型
泛型就是泛指一种类型。
如何使用泛型
1. 泛型类
public class 类名 <泛型类型1,...> {
}
例:
public class TestClass<T> {
private T value;
public TestClass(T value) {
this.value = value;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
2. 泛型接口
public <泛型类型> 返回类型 方法名(泛型类型 变量名) {
}
例:
public interface TestInterface<T> {
void show(T value);}
}
public class StringShowImpl implements TestInterface<String> {
@Override
public void show(String value) {
System.out.println(value);
}
}
public class NumberShowImpl implements GenericInterface<Integer> {
@Override
public void show(Integer value) {
System.out.println(value);
}
}
3. 泛型方法
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
例:
/**
*
* @param t 传入泛型的参数
* @param <T> 泛型的类型
* @return T 返回值为T类型
* 说明:
* 1)public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。
* 2)只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。
* 3)<T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。
* 4)与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E等形式的参数常用于表示泛型。
*/
public <T> T genercMethod(T t){
System.out.println(t.getClass());
System.out.println(t);
return t;
}
public static void main(String[] args) {
GenericsClassDemo<String> genericString = new GenericsClassDemo("helloGeneric"); //这里的泛型跟下面调用的泛型方法可以不一样。
String str = genericString.genercMethod("hello");//传入的是String类型,返回的也是String类型
Integer i = genericString.genercMethod(123);//传入的是Integer类型,返回的也是Integer类型
}
class java.lang.String
hello
class java.lang.Integer
123
泛型有三种通配符
一:<?>
无边界通配符,表示类型参数可以是任何类型。例:
public class Apple<?>{}
二:<? extends E>
固定上边界的通配符,表示类型参数必须是E或者是E的子类。
public class Apple<T extends Test>{}
三:<? supers E>
固定下边界的通配符,表示类型参数必须是E或者是E的超类型
public class Apple<T supers Test>{}
附录一:常用泛型参数名称
E: Element (在集合中使用,因为集合中存放的是元素)
T:Type(Java 类)
K: key-value形式 Key(键)
V: key-value形式 Value(值)
N: Number(数值类型)
?: 表示不确定的java类型

浙公网安备 33010602011771号