如何返回一个也具有泛型类型的泛型对象?

mom*_*omo 5 java generics

假设我有一个任何泛型类型的集合(请不要关注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)

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

rua*_*akh 5

这没有道理。所以你可以接受 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)