泛型
本质:参数化类型(把类型作为参数传递)
常见形式:泛型类,泛型接口,泛型方法
语法:<T …> T称为占位符,表示一种引用类型。
好处:
-
提高代码的重用性
-
防止类型转换异常,提高代码安全性
public class Test {
public static void main(String[] args) {
// 使用泛型类创建对象
// 注意:泛型只能使用引用类型
// 不同的泛型类型对象之间不能相互赋值
MyGeneric<String> myGeneric = new MyGeneric<>();
myGeneric.t = "Hello";
myGeneric.show("Hi");
System.out.println(myGeneric.getT());
System.out.println("-----------------");
MyGeneric<Integer> myGeneric1 = new MyGeneric<>();
myGeneric1.t = 100;
myGeneric1.show(200);
Integer integer = myGeneric1.getT();
System.out.println(integer);
System.out.println("-----------------");
MyInterfaceImpl test1 = new MyInterfaceImpl();
MyInterfaceImpl2<Integer> test2 = new MyInterfaceImpl2<>();
test1.server("test1");
test2.server(200);
System.out.println("-----------------");
MyGenericMethod myGenericMethod = new MyGenericMethod();
myGenericMethod.show("java世界第一"); // 泛型类型由传递的数据类型决定
myGenericMethod.show(500);
myGenericMethod.show(3.14);
}
}
/**
* 泛型类
* 语法:类名<T>
* 如果多个泛型,使用逗号隔开
*/
public class MyGeneric<T> {
// 使用泛型
// 创建变量
T t;
// 泛型作为方法的变量
public void show(T t) {
System.out.println(t);
}
// 泛型作为方法的返回值
public T getT() {
return t;
}
}
/**
* 泛型接口
*/
public interface MyInterface<T> {
String name = "Leo"; // 接口内可创建静态常量
// T t; // 不能使用泛型创建静态常量
T server(T t);
}
//第一种泛型接口实现方式:直接确定好泛型类型
public class MyInterfaceImpl implements MyInterface<String> {
@Override
public String server(String s) {
System.out.println(s);
return s;
}
}
// 第二种泛型接口实现方式:不确定泛型类型
// 在创建对象时确定泛型类型
public class MyInterfaceImpl2<T> implements MyInterface<T> {
@Override
public T server(T t) {
System.out.println(t);
return t;
}
}
/**
* 泛型方法
* 语法:<T>返回值类型
*/
public class MyGenericMethod {
// 泛型方法
public <T> T show(T t) {
System.out.println("泛型方法 " + t);
return t;
}
}
本文详细介绍了Java中的泛型概念,包括泛型类、接口和方法的使用,以及其如何提升代码复用性、安全性。通过实例演示了如何创建和操作不同类型参数的泛型对象,展示了其在避免类型转换异常和增强代码灵活性上的作用。
1687

被折叠的 条评论
为什么被折叠?



