gpt4 book ai didi

java - 在 Java 中获取泛型的泛型

转载 作者:行者123 更新时间:2023-11-30 08:06:12 24 4
gpt4 key购买 nike

我有课。它将是简单的容器,其中可能包含某种类型 T然后输入 Optional<T> ( Guava Optional link )与 Container.of(T)没有问题。但是,如何创建 Container.ofOptional(T) ?
这是我的类(class):

public final class Container<T>{
Class<?> firstClass;
Class<T> seconClass;

Container(Class<?> first, Class<T> second){
this.firstClass = first;
this.seconClass = second;
}

public static <T> Container<T> of(Class<?> first, Class<T> second){
return new Container(first, second);
}

public static <T> Container<Optional<T>> ofOptional(Class<?> first, Class<T> second){
return of(first, <what should I pass here>);
}
}

我试过了 Optional.of(second)但它不起作用。

所以,结果,我想要方法 Container.ofOptional(T)返回 Container<Optional<T>>

最佳答案

由于type erasure ,这真的没有意义。只有一个 Optional.classOptional.of("foo").getClass()Optional.of(3).getClass()两者都返回相同的实例——所以尽管你可以获得类型为 Class<Optional<T>> 的表达式通过大量转换,它的运行时类型必然是 Class<Optional> (或者只是 null),所以你不能用它做任何真正有用的事情。

所以你的问题的简单答案是你可以写

  public static <T> Container<Optional<T>> ofOptional(Class<?> first, Class<T> second){
return of(first, (Class<Optional<T>>) (Class) Optional.class);
}

但真正的答案是你不应该这样做。

(您可能想发布一个关于您的真实问题的新问题——Container 试图解决的问题——也许有人可以帮助您找到更好的方法。)

关于java - 在 Java 中获取泛型的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34552216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com