我对可以在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>
也太模糊了。
在这种情况下使用的语法是什么?
答案 0 :(得分:5)
这个怎么样?
public <U extends AnotherType> SomeSuperClass<U> foo(U bar){
return new SomeSuperClass<U>(bar);
}