定义泛型接口
/**
* 定义泛型接口,由于类与接口命名标准相同,为了区分出类与接口,在接口前加上了字母“I”,例如:IMessage
* 如果以后定义抽象类,则可以在前面加上Abstract,例如:AbstractMessage
* @author YOOTK
* @param <T> print()方法使用的泛型类型
*/
interface IMessage<T> { // 定义泛型接口
public void print(T t);
}
实现方式一:在子类继续设置泛型标记
interface IMessage<T> { // 定义泛型接口
public void print(T t);
}
class MessageImpl<S> implements IMessage<S> { // 在子类继续设置泛型,此泛型也作为接口中的泛型类型
public void print(S t) {
System.out.println(t);
}
}
public class TestDemo {
public static void main(String[] args) {
IMessage<String> msg = new MessageImpl<String>() ;
msg.print("ww");
}
}
实现方式二:在子类不设置泛型,而为父接口明确的定义一个泛型类型
interface IMessage<T> { // 定义泛型接口
public void print(T t);
}
class MessageImpl implements IMessage<String> { // 子类为父接口设置具体泛型类型
public void print(String t) {
System.out.println(t);
}
}
public class TestDemo {
public static void main(String[] args) {
IMessage<String> msg = new MessageImpl() ;
msg.print("ww");
}
}
泛型方法定义
public class TestDemo {
public static void main(String[] args) {
String str = fun("ww"); // 泛型类型为String
System.out.println(str.length()); // 计算长度
}
/**
* 此方法为泛型方法,T的类型由传入的参数类型决定,
* 但是必须在方法返回值类型前明确定义泛型标记
* @param t 参数类型,同时也决定了返回值类型
* @return 直接返回设置进来的内容
*/
public static <T> T fun(T t) {
return t;
}
}