java - 是否使用泛型?

标签 java generics

我有以下类层次结构

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 {

}

我有一个转换器,它应该接受扩展 AbstractClassAclass 实例,并且应该返回 classinstance > 扩展 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/

相关文章:

java - 如何在自定义 getter 中序列化 JSON 对象?

c# - 通用方法不是选择最具体的构造函数签名吗?

c# - 单例的通用抽象基类 (C#) - 无法实例化私有(private) Lazy 实例

c# - C# : operator '<' cannot be applied to operands of type 'T' and 'T' 中的比较

java - 使用 jsch 连接到 azure 中托管的 sftp 服务器时连接重置

java - java中单链表的一些问题

java - 带有最终访问修饰符的 char 和 byte - java

java - 如何将真实尺寸的图像保存到SD卡中

java - 在 Java 中扩展 T 和 SomeInterface<T>

c# - 具有泛型类型的方法,设置值