返回泛型类型的新实例,其中T设置为给定arg的类型

时间:2012-11-01 22:41:50

标签: java generics inheritance

我对可以在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,在SomeSuperClass层次结构中,incase bar的类型更高?仅使用SomeClass<AnotherType>也太模糊了。

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

1 个答案:

答案 0 :(得分:5)

这个怎么样?

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