【Java】泛型
泛型类
泛型指的就是在类定义的时候并不会设置类中的属性或方法中的参数的具体类型,而是在类使用时再进行定义。
class MyClass<T>{
T value;
}
MyClass<String> myclass = new MyClass<String>();
MyClass<Integer> myclass = new MyClass<Integer>();
虽然说<>内的字母是任意的,但规范期间一般使用如下字母:
- T代表一般的任何类。
- E代表Element的意思,或者Exception异常的意思。
- K代表Key的意思
- V代表Value的意思。
- S代表Subtype的意思。
C++中的泛型可以任意,但Java中泛型只能接受类,所有的基本数据类型必须使用包装类!
泛型方法
class MyClass{
public <T> void Method(T t){
System.out.println(t);
}
}
值得注意的是,
?通配符
有了泛型,又出现了心得问题,参数统一问题。如果都是泛型,但类型不一致就会报错。所有就有了通配符。
它可以接受所有得泛型,但又不能随意修改。
?extends 类:设置泛型上限。
- 例如:?extends Number,表示只能够设置Number或其子类,例如:Integer、Double等;
?super类:设置泛型下限。
- 例如:?super String,表示只能够设置String及其父类Object。
泛型接口
与泛型类相同,也可以定义泛型接口。
interface IMessage<T>{
public void print(T t);
}
对于接口的实现又两种:
一:继续使用泛型
interface IMessage<T>{
public void print(Tt);
}
class MessageImp1<T> implements IMessage<T>{
@override
public void print(Tt){
system.out.println(t);
}
}
二:给出具体类型
interface IMessage<T>{
public void print(T t);
}
class MessageImpl implements IMessage<String>{
@override
public void print(String t){
system.out.println(t);
}
}