有沒有辦法在Java中獲取字段的泛型類型?使用relection獲取字段的泛型類型
我有以下對象變量:
protected ScheduleView<WantedClass> scheduleLine1;
protected ScheduleView<SomeOtherClass> scheduleLine2;
現在我嘗試使用反射來獲得誰擁有ScheduleView
類型與WantedClass
作爲泛型類型的所有對象變量:
Arrays.asList(this.getClass().getDeclaredFields()).stream().map(field -> {
ScheduleView<WantedClass> retValue = null;
System.out.println(field.getGenericType()); // prints control.ScheduleView<dto.WantedClass>
try {
if (field.getType() == ScheduleView.class) { // here I also want to check if the generic type is WantedClass
retValue = (ScheduleView<WantedClass>) field.get(this);
} else {
retValue = null;
}
} catch (IllegalAccessException e) {
retValue = null;
} finally {
return retValue;
}
}).filter(scheduleView -> scheduleView != null).forEach(scheduleView -> {
/* some more code */
});
的事情是我如果泛型類型爲WantedClass
,還希望檢查if語句。我使用的方法也試過getGenericType()
但似乎這樣的事情是不可能的:
field.getGenericType() == ScheduleView<WantedClass>.class
那麼,有沒有辦法讓通用字段的類型?
號這些是在編譯時擦除。您無法檢索該類型。 – f1sh
@ f1sh你確定嗎?這些不是類型變量(我假設)。 –
@ f1sh如果所有的泛型類型都在編譯時被擦除,爲什麼'System.out.println(field.getGenericType());'print' control.ScheduleView'? –