erhalten Gibt es eine Möglichkeit, den generischen Typ eines Felds in Java zu erhalten?Generischen Typ eines Felds mit der Auswahl
ich folgende Objektvariablen haben:
protected ScheduleView<WantedClass> scheduleLine1;
protected ScheduleView<SomeOtherClass> scheduleLine2;
Jetzt habe ich Reflektion Versuchen Sie es mit der alle Objektvariablen zu erhalten, die mit WantedClass
als generische Typ ScheduleView
als Typ haben:
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 */
});
Das, was ich ist Außerdem möchten Sie die if-Anweisung einchecken, wenn der generische Typ WantedClass
lautet. Ich habe auch versucht, das Verfahren unter Verwendung von getGenericType()
, aber es scheint so etwas wie dies nicht möglich ist:
field.getGenericType() == ScheduleView<WantedClass>.class
So gibt es eine Möglichkeit, den generischen Typen ein Feld zu bekommen?
No. Die auf Compile-Zeit gelöscht werden. Sie können diesen Typ nicht abrufen. – f1sh
@ f1sh bist du sicher? Dies sind keine Typvariablen (ich nehme an). –
@ f1sh Wenn alle generischen Typen zur Kompilierzeit gelöscht werden, warum wird 'System.out.println (field.getGenericType());' print 'control.ScheduleView'? –