gpt4 book ai didi

java - 如何返回也具有泛型类型的泛型对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:15 24 4
gpt4 key购买 nike

假设我有一个集合(请不要关注集合接口(interface))任何通用类型的对象。集合、TreeSet、ArrayList、SortedSet 等 ...

然后我想要一个类似于这个伪方法的方法(有缺陷):

private static <T,V> T<V> returnPlease(T<V> obj) {
return obj;
}

但现在我得到“Type T does not have Type parameters”

也就是说,我也想访问子泛型。

我知道更常见的方式:

private static <T> T returnPlease(T obj) {
return obj;
}

只是我希望该方法也能访问它是什么类型的 TreeSet。不仅是 TreeSet,还有它使用的通用版本,在本例中是 String。

我的语法怎么错了?这不可能吗?

================== 编辑更清晰 ==================

static interface AnInterface<Return, Param1> {
public Return method(Param1 obj1);
}

private static <T,V> AnInterface<V, V> returnPlease(T<V> obj) {
return new AnInterface<V, V>() {
public V method(V v) {
// Do something
return null;
}
};
}

我希望这有助于更多地理解......

最佳答案

这没有意义。所以你会没事的。用Comparable<V> 一个Set<V> 一个ThreadLocal<V> ,尽管它们唯一的共同点是它们都有一些类型参数?

您写道“请不要关注 Collection 界面”,但我认为那确实是唯一的选择;您需要有某种特定的有意义的要求,例如"implements Collection<V> ",以使类型参数有意义。例如,你可以这样写:

static interface AnInterface<Return, Param1> {
public Return method(Param1 obj1);
}

private static <V, T extends Collection<? extends V>> AnInterface<V, V> returnPlease(T obj) {
return new AnInterface<V, V>() {
public V method(V v) {
// Do something
return null;
}
};
}

而且 Java 实际上足够聪明,可以推断出 TV从你传递的参数类型,所以你可以写例如:

AnInterface<String, String> x = returnPlease(new TreeSet<String>());

关于java - 如何返回也具有泛型类型的泛型对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12110981/

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