Javaでフィールドの汎用タイプを取得する方法はありますか?Relectionを使用してフィールドのジェネリック型を取得する
私は、オブジェクト変数を次のようしている。
protected ScheduleView<WantedClass> scheduleLine1;
protected ScheduleView<SomeOtherClass> scheduleLine2;
今私は、ジェネリック型とWantedClass
とタイプとしてScheduleView
を持つすべてのオブジェクト変数を取得するためにリフレクションを使用してみてください:
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-Statementをチェックインします。私はまた、この方法を使用してみましたgetGenericType()
が、このようなものができないようだ。
field.getGenericType() == ScheduleView<WantedClass>.class
ので、フィールドの一般的な種類を取得する方法はありますか?
番これらはコンパイル時に消去されます。そのタイプは取得できません。 – f1sh
@ f1shあなたは本当ですか?これらは型変数ではありません(私は推測します)。 –
@ f1shコンパイル時にすべてのジェネリック型が消去された場合、なぜ 'System.out.println(field.getGenericType());' print 'control.ScheduleView'? –