说我有一个集合(不专注在集合接口请)任何泛型类型的对象。 Set,TreeSet,ArrayList,SortedSet等......
然后我想要一个类似于这个伪方法的方法(有缺陷):
private static <T,V> T<V> returnPlease(T<V> obj) {
return obj;
}
但现在我得到“Type T没有Type参数”
也就是说,我也想访问子通用类型。
我知道更常见的方式:
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;
}
};
}
我希望这有助于理解更多...
答案 0 :(得分:4)
这没有意义。所以你会成为O.K.使用Comparable<V>
或 Set<V>
或 a ThreadLocal<V>
,即使他们唯一的共同点是他们每个人都有某些类型参数?
您写道“请不要专注于收藏界面”,但我认为这是唯一的选择;你需要有某种特定的有意义的要求,例如: “implements Collection<V>
”,以使type参数有意义。例如,您可以写:
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实际上足够聪明,可以根据您传递的参数类型推断T
和V
,因此您可以编写例如:
AnInterface<String, String> x = returnPlease(new TreeSet<String>());