2

我有一个关于可以在 Java 中返回参数化泛型类型的方法的问题。请耐心等待,因为我可能不会简明扼要地解释它!假设我们有以下内容:

public class SomeClass<T extends AnotherType> extends SomeSuperClass<T>{
    private AnotherType member;        

    public SomeClass(AnotherType at){
       member = at;
    }

    public SomeSuperClass<xxx> foo(AnotherType bar){
       return new SomeSuperClass<xxx>(bar);
    }

}

所以我们有了这个类似工厂的简单方法'foo'。我可以用什么代替“xxx”来表示返回的新实例的参数化类型将是“bar”对象的特定类型。例如,如果 bar 属于 Bar 类(AnotherType 的子类),那么我们将返回SomeSuperClass<Bar>(bar)

我知道我可以使用“?” 代表任何类型并具有:

return new SomeSuperClass<?>(bar);

但我希望更具体一点:

return new SomeSuperClass<bar.class>(bar);

我不能使用 T,如果 bar 的类型在 SomeSuperClass 层次结构中更高?也使用 justSomeClass<AnotherType>太模糊了。

在这种情况下使用什么语法?

4

1 回答 1

5

这个怎么样?

public <U extends AnotherType> SomeSuperClass<U> foo(U bar){
    return new SomeSuperClass<U>(bar);
}
于 2012-11-01T22:48:46.577 回答