假设我有一个任何泛型类型的集合(请不要关注Collection接口)对象。Set、TreeSet、ArrayList、SortedSet 等...
然后我想要一种类似于这个伪方法的方法(这是有缺陷的):
private static <T,V> T<V> returnPlease(T<V> obj) {
return obj;
}
Run Code Online (Sandbox Code Playgroud)
但现在我得到“T 类型没有类型参数”
也就是说,我也想访问子泛型类型。
我知道更常见的方式:
private static <T> T returnPlease(T obj) {
return obj;
}
Run Code Online (Sandbox Code Playgroud)
只是我希望该方法也能访问 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;
}
};
}
Run Code Online (Sandbox Code Playgroud)
我希望这有助于更多地理解......
这没有道理。所以你可以接受 aComparable<V> 或aSet<V> 或a 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;
}
};
}
Run Code Online (Sandbox Code Playgroud)
Java 实际上会足够聪明,可以从您传递的参数类型中推断出T和,因此您可以编写例如:V
AnInterface<String, String> x = returnPlease(new TreeSet<String>());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2001 次 |
| 最近记录: |