我有以下类层次结构
public abstract class MyAbstractClass {
}
public abstract class AbstractClassA extends MyAbstractClass {
}
public class AbstractClassB extends MyAbstractClass {
}
public class ClassA extends AbstractClassA {
}
public class ClassB extends AbstractClassA {
}
我有一个转换器,它应该接受扩展 AbstractClassA
的 class
实例,并且应该返回 class
的 instance
> 扩展 AbstractClassB
。我有两个版本的转换类,一个使用 Generic,另一个不使用。两者都有效。但是指定转换器签名的正确方法是什么?
public class ConverterTwo {
public AbstractClassB convert(AbstractClassA a) {
}
}
public class ConverterOne {
public <A extends AbstractClassA, B extends AbstractClassB> B convert(A a) {
}
}
最佳答案
泛型仅在编译时检查,并在编译期间替换为正确的类型。
ConverterTwo
代码在编译过程中会被转换为ConverterOne
类型的代码,因此两者是等价的。
当您编写 API 时您不知道 API 的使用者将传递哪种对象,泛型尤其有用。 在您的情况下,如果您打算编写通用适配器。
泛型的经典示例:集合接口(interface)和实现它的类。
关于java - 是否使用泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22293264/