面试题答案
一键面试- 设计思路:
- 类型推断:Java泛型可以让编译器根据传入的实际参数类型来推断泛型类型。在静态方法中,通过在方法签名中声明泛型类型参数,编译器能在调用方法时自动判断具体类型。
- 边界设定:使用
extends
关键字来设定类型的上界,确保传入的类型满足特定的继承关系或实现特定接口。如果参数类型之间存在依赖关系,可以通过泛型类型参数之间的约束来体现。例如,如果一个参数类型依赖于另一个参数类型,那么可以在泛型声明中通过边界设定来保证这种依赖关系。
- 代码实现:
class GenericUtils {
// 假设存在一个接口Dependency,所有依赖的类型都需要实现它
interface Dependency {}
// 假设TypeB依赖于TypeA,TypeA和TypeB都需要实现Dependency接口
public static <TypeA extends Dependency, TypeB extends Dependency & TypeA> void complexMethod(TypeA a, TypeB b) {
// 这里可以处理具体业务逻辑,例如:
System.out.println("TypeA value: " + a);
System.out.println("TypeB value: " + b);
}
}
你可以通过以下方式调用这个方法:
class Main {
public static void main(String[] args) {
// 定义实现Dependency接口的类
class TypeAImpl implements GenericUtils.Dependency {}
class TypeBImpl extends TypeAImpl {}
TypeAImpl a = new TypeAImpl();
TypeBImpl b = new TypeBImpl();
GenericUtils.complexMethod(a, b);
}
}
上述代码中,complexMethod
方法使用了两个泛型类型参数TypeA
和TypeB
,TypeA
和TypeB
都有上界Dependency
,并且TypeB
不仅要实现Dependency
接口,还需要是TypeA
类型或其子类型,这样就体现了参数类型之间的依赖关系。在main
方法中创建了满足类型边界约束的实例并调用complexMethod
方法。