因为集合的中存放的数据类型不固定,在往集合中存放元素时容易因为数据类型不一致的问题导致安全隐患,于是 Java 推出了泛型用于规范集合的数据类型。
定义泛型类在定义带类型参数的类时,在紧跟类名之后 <> 内,指定一个或多个类型参数的名字,同时也可以对类型参数的取值范围进行限定,多个类型参数之间用逗号分隔。定义完类型参数后,可以在定义位置之后的几乎任意地方(静态块, 静态属性,静态方法除外)使用类型参数,就像使用普通的类型一样。注意, 父类定义的类型参数不能被子类继承。
普通定义类:
public class Demo {
private Object object;
public Demo(Object object) {
this.object = object;
}
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
}
定义泛型类:
public class Demo{ private T object; public Demo(T object) { this.object = object; } public T getObject() { return object; } public void setObject(T object) { this.object = object; } }
使用泛型类:
public static void main(String[] args) {
Demo demo = new Demo(233);
Demo demo2 = new Demo("诶嘿~");
Demo demo3 = new Demo(13.14);
System.out.println(demo.getObject());
System.out.println(demo2.getObject());
System.out.println(demo3.getObject());
}
结果:
233 诶嘿~ 13.14定义泛型方法
在定义带类型参数的方法时,紧跟可见范围修饰(例如 public )之后的 <> 内,指定一个或多类型参数的名字, 同时也可以对类型参数的取值范围进行限定,多个类型参数之间用逗号分隔。
定义普通方法:
public static void print(Object[] objects) {
for(Object object: objects) {
System.out.print(object);
}
}
定义泛型方法:
public staticvoid print(T[] ts) { for(T t: ts) { System.out.print(t); } }
使用泛型方法:
public static void main(String[] args) {
Integer[] nums = new Integer[]{1, 1, 4, 5, 1, 4};
print(nums);
String[] strings = new String[]{"诶", "嘿", "哈哈哈哈"};
print(strings);
}
结果:
114514诶嘿哈哈哈哈定义泛型接口:
在定义带类型参数的接口时,在紧跟接口名之后 <> 内,指定一个或多个类型参数的名字,同时也可以对类型参数的取值范围进行限定,多个类型参数之间用逗号分隔。接口中不能使用泛型来定义成员属性。
定义普通接口:
interface Animal{
public Object call();
public Object eat(Object food);
}
定义泛型接口:
interface Animal{ public T call(); public T eat(T food); }
使用泛型接口:
public class Demo {
public static void main(String[] args) {
Cat cat = new Cat();
System.out.println(cat.call());
System.out.println(cat.eat("鱼"));
Dog dog = new Dog();
System.out.println(dog.call());
System.out.println(dog.eat(111));
}
}
class Cat implements Animal{
@Override
public String call() {
return "喵喵喵喵喵喵";
}
@Override
public String eat(String food) {
return food;
}
}
class Dog implements Animal{
@Override
public Integer call() {
return 555555;
}
@Override
public Integer eat(Integer food) {
return food;
}
}
结果:
喵喵喵喵喵喵 鱼 555555 111
这里我只讲了下泛型的基本使用,如果想要了解的更详细的话推荐去看这个大佬的:
java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一_s10461的博客-CSDN博客_java泛型https://blog.csdn.net/s10461/article/details/53941091记住,看会和自己真的会是两个概念,多实践多动手才能真正理解。



