泛型
在类定义的时候不设置具体的类型,只做一个标记,在使用的时候才会动态绑定一种数据类型。
class Message<T> {// T Type P Param R Return
private T info;
public T getInfo() {
return info;
}
public void setInfo(T info) {
this.info = info;
}
}
// 类实例化的时候动态绑定数据类型
Message<String> message = new Message<String>();
泛型通配符
-
Class<?>
-
Class<? extends T> 设置泛型的上限 ,只能设置T或者其子类
private static void getMessage(Message<? extends Number> message) {
System.out.println(message.getInfo()); // 泛型通配符 不能设置属性值,但可以取属性的值
}
- Class<? super T> 设置泛型的下限,只能设置T或者其父类
泛型接口
- 子类继续使用泛型
// 泛型接口类
interface IMessage<P>{
void print(P p);
}
//具体实现类
class MessageImpl<R> implements IMessage<R>{
public void print(R r) {
System.out.println(r);
}
}
// 测试
IMessage<String> iMessage = new MessageImpl<String>();
iMessage.print("hello world");
- 子类定义不使用泛型,直接给父接口定义好泛型。
class MessageImpl implements IMessage<String>{
public void print(String s) {
System.out.println(s);
}
}
IMessage<String> iMessage = new MessageImpl();
iMessage.print("hello world");
泛型方法
如一个方法使用了泛型,那这个方法就是泛型方法。
/**
*
* <T> T[] --->表示申明泛型并使用泛型
* @param args 可变的泛型 T 类型
* @param <T>
* @return
*/
public static <T> T[] fun(T...args){
return args;
}
// 测试
Integer[] temp = fun(1, 2, 3);
for (Integer t : temp) {
System.out.println(t);
}
网友评论