java - Java 中的新 <T>

标签 java generics instantiation

我有这个问题

一种从一个类中删除不需要的细节并返回包含所需细节的对象集合的方法。问题是我希望这种方法能够与不同的类一起使用(尽管它们基于一个抽象),所以我使用泛型类型。问题是,在某一时刻我需要创建 的一个实例,这是不可能的。我寻找一些出路,但它似乎不适合我的情况。 所以,代码如下

 private <T extends RestMandate> List<T> toRestMandate(List<CardMandate> mandates ) {
    List<T> restMandates = new ArrayList<>(mandates == null ? 0
            : mandates.size());
    if (mandates != null) {
        for (CardMandate mandate : mandates) {
             restMandates.add(new T(mandate));
        }
    }

    return restMandates;
}

RestMandate 是基类,CardMandate 是我获取的信息。有什么想法吗?

最佳答案

由于泛型类型参数在运行时被删除,因此您无法像您尝试的那样引用它。唯一的出路是类型标签参数+反射实例化。

更好的选择是重新设计您的解决方案来解决这个问题,而不依赖泛型和类型标签。而是利用动态方法分派(dispatch):向 RestMandate 添加一个方法,该方法将返回转换为所需类型的对象。

关于java - Java 中的新 <T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19001711/

相关文章:

java - 仅当用户确认选择时才在 JComboBox 上处理 actionPerformed

java - 如何在 IntelliJ 注册表中设置值?

java - 在 Spring 中使用 RestTemplate 的 MultipartFile + String 作为请求参数

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?

c# - 将默认类型设置为通用调用方方法 C#

java - 关于使用Java泛型的错误: "type parameter S is not within its bound"

ruby - 有没有办法在类实例化后销毁 *self* ?

ios - 我怎样才能同时实例化一个带有containerView和它的containerView的viewController?

java - 如何实例化 Anylogic block /对象 (INode)

java - java中基于正则表达式的多维数组切片