泛型类
泛型指的就是在类定义的时候并不会设置类中的属性或方法中的参数的具体类型, 而是在类使用时再进行定义.
- 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);
- }
- }
值得注意的是, 写在了返回值前面. C++ 中是写在返回值后面的.
? 通配符
有了泛型, 又出现了心得问题, 参数统一问题. 如果都是泛型, 但类型不一致就会报错. 所有就有了通配符.
它可以接受所有得泛型, 但又不能随意修改.
?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);
- }
- }
来源: http://www.bubuko.com/infodetail-3402110.html