Java泛型 - 获取返回与第一个参数相同类型的方法

Num*_*ron 11 java generics types return return-type

这样的事情是我想要实现的:

public Attribute<?> getAttribute(Class<? extends Attribute> attributeClass){
  for(Attribute attribute: attributes)
    if(attributeClass.isInstance(attribute)) return attributeClass.cast(attribute);
  return null;
}
Run Code Online (Sandbox Code Playgroud)

其中Attribute <?>显然是不正确的部分.

我希望这个方法的返回类型是attributeClass,但我似乎无法弄清楚如何得到它.我应该注意到我知道我可以使用Attribute作为返回类型,但是这种方法通常以这种方式调用:

AttributeType1 attributeType1 = getAttribute(AttributeType1.class);
Run Code Online (Sandbox Code Playgroud)

......我试图避免每次都要施展.

帮助赞赏.

rat*_*eak 14

这就是你需要的

public <T extends Attribute> T getAttribute(Class<T> attributeClass){
Run Code Online (Sandbox Code Playgroud)

您需要在返回类型之前指定泛型类型


Kal*_*Kal 5

public <T extends Attribute> T getAttribute(Class<T> attributeClass) {
Run Code Online (Sandbox Code Playgroud)

应该管用