Обобщения Java - получение метода, возвращающего тот же тип, что и первый параметр - PullRequest
11 голосов
/ 09 июня 2011

Что-то вроде этого - то, чего я пытаюсь достичь:

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

где Атрибут <?>, Очевидно, является неправильной частью.

Я хочу, чтобы возвращаемый тип этого метода был attributeClass, но я не могу понять, как его получить. Я должен отметить, что мне известно, что я мог бы просто использовать Attribute в качестве возвращаемого типа, но этот метод в основном вызывался бы следующим образом:

AttributeType1 attributeType1 = getAttribute(AttributeType1.class);

... и я стараюсь не каждый раз кастовать.

Помощь оценена.

Ответы [ 2 ]

14 голосов
/ 09 июня 2011

это то, что вам нужно

public <T extends Attribute> T getAttribute(Class<T> attributeClass){

вам необходимо указать общий тип перед типом возврата

4 голосов
/ 09 июня 2011
public <T extends Attribute> T getAttribute(Class<T> attributeClass) {

должно работать

...