Java泛型
1. 什么是Java泛型?它的作用是什么?
Java泛型是一种编程语言特性,它允许在编写代码时使用类型参数,从而使得代码更加通用、可重用、类型安全。它的作用是在编译时检查类型安全,从而避免在运行时出现类型错误。
2. 什么是泛型类?如何声明一个泛型类?
泛型类是一种具有类型参数的类,它可以在类中使用这些类型参数来定义属性、方法和构造函数。泛型类的声明方式如下:
public class MyClass<T> {
// 类的属性、方法和构造函数可以使用 T 类型参数
}
其中,<T>
是类型参数,可以替换成任意标识符。在使用泛型类时,需要指定具体的类型参数,例如:
MyClass<String> myObject = new MyClass<String>();
3. 什么是泛型方法?如何声明一个泛型方法?
泛型方法是一种具有类型参数的方法,它可以在方法中使用这些类型参数来定义参数类型、返回值类型和局部变量类型。泛型方法的声明方式如下:
public <T> void myMethod(T arg) {
// 方法中可以使用 T 类型参数
}
其中,<T>
是类型参数,可以替换成任意标识符。在使用泛型方法时,可以根据实际情况指定类型参数,例如:
myObject.<String>myMethod("hello");
4. Java泛型中的通配符是什么?它的作用是什么?
Java泛型中的通配符是?
,它可以用于表示未知类型。通配符可以用于泛型类和泛型方法中,用于限制类型参数的范围。通配符的作用是允许我们编写更加通用、灵活的代码。
5. 什么是上界通配符?如何使用上界通配符?
上界通配符是指使用extends
关键字限制类型参数的范围。上界通配符可以用于泛型类和泛型方法中,用于限制类型参数必须是某个类或其子类。例如:
public class MyClass<T extends Number> {
// 类的属性、方法和构造函数可以使用 T 类型参数,但必须是 Number 或其子类
}
在使用上界通配符时,可以使用? extends
表示通配符必须是某个类或其子类,例如:
List<? extends Number> myList = new ArrayList<Integer>();
6. 什么是下界通配符?如何使用下界通配符?
下界通配符是指使用super
关键字限制类型参数的范围。下界通配符可以用于泛型类和泛型方法中,用于限制类型参数必须是某个类或其父类。例如:
public class MyClass<T super Integer> {
// 类的属性、方法和构造函数可以使用 T 类型参数,但必须是 Integer 或其父类
}
在使用下界通配符时,可以使用? super
表示通配符必须是某个类或其父类,例如:
List<? super Integer> myList = new ArrayList<Number>();
7. 什么是类型擦除?它对泛型的影响是什么?
类型擦除是指在编译时将泛型类型转换成原始类型的过程。类型擦除对泛型的影响是会使得泛型在运行时失去类型信息,从而无法使用泛型的类型检查和强制类型转换等特性。但是,类型擦除也使得Java泛型具有与旧版本Java代码兼容的能力。
8. 如何使用泛型实现类型安全的集合?
可以使用泛型实现类型安全的集合,例如:
List<String> myList = new ArrayList<String>();
myList.add("hello");
String myString = myList.get(0);
上面的代码使用泛型来声明一个List
集合,其中存储的元素必须是String
类型。这样可以在编译时检查类型安全,避免在运行时出现类型错误。