我上课了。它将是简单容器,可能包含某些类型T
和类型Optional<T>
(guava Optional
link)
使用Container.of(T)
没有问题。但是,如何创建Container.ofOptional(T)
?
这是我的班级:
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>>
答案 0 :(得分:3)
由于type erasure,这并不合理。只有一个{
....
updateButton(session, "myBtn", "New Label")
....
}
- Optional.class
和Optional.of("foo").getClass()
都返回相同的实例 - 所以尽管你可以通过大量的转换获得Optional.of(3).getClass()
类型的表达式,但是runtime-type必然是Class<Optional<T>>
(或者只是null),所以你不能做任何真正有用的事情。
所以你问题的简单答案是你可以写
Class<Optional>
但真正的答案是你不应该这样做。
(您可能希望发布一个关于真正的问题的新问题 - public static <T> Container<Optional<T>> ofOptional(Class<?> first, Class<T> second){
return of(first, (Class<Optional<T>>) (Class) Optional.class);
}
正试图解决的问题 - 也许有人可以帮助您找到更好的方法。)< / p>