Вопреки некоторым комментариям информация, очевидно, существует, стирание типов не происходит на уровне интерфейса - так же, как Eclipse / NetBeans / IntelliJ / и т.д.вы можете получить точный тип / тип возвращаемых членов класса, вы тоже можете это сделать:
public class Name {
public List<Name> getAllNames(){return null;}
public static void main(String[] args) throws Exception {
Method m=Name.class.getMethod("getAllNames");
ParameterizedType pt=(ParameterizedType)m.getGenericReturnType();
System.out.println(pt.getActualTypeArguments()[0]);
}
}
BCEL
- это еще одна история, я не знаком с ней, однако самый конец FieldOrMethod.java
, есть метод с именем getGenericSignature()
.Вы можете уже найти это полезным (хотя, по-видимому, он генерирует подпись), или вы можете повторить цикл внутри, через attributes
(вы можете получить их через getAttributes()
), проверяя наличие instanceof Signature
:
Attribute a[]=m.getAttributes(); // where is the org.apache.bcel.classfile.Method you have
for(int i=0;i<a.length;i++)
if(a[i] instanceof Signature)
System.out.println(a[i]); // this is just a test of course.
Реальный код предполагает, что такой атрибут может быть только один, и цикл может завершиться впоследствии, но это заставило меня задуматься о типах, имеющих несколько параметров, например Map
-s ...
getGenericSignature()
сам по себе не встречается нигде (ни проверен, ни использован), поэтому я могу только надеяться, что он (и, следовательно, описанный выше подход) действительно работает.