Field.getDeclaringClass()
может работать.
Пример:
class A{
public int f;
}
class B extends A{
public int g;
}
class C extends B{
public int h;
}
class Test{
public static void main(String[]args) throws Exception{
Class<C> c = C.class;
System.out.println(c.getField("f").getDeclaringClass());
System.out.println(c.getField("g").getDeclaringClass());
System.out.println(c.getField("h").getDeclaringClass());
}
}
Печать:
class A
class B
class C
Изменить:
Лично я не знаю, как сделать это без размышлений. С другой стороны, написание «.myField
» подразумевает, что вы знаете, что объект имеет это поле, так что в некотором смысле оно все еще жестко закодировано, и это также подразумевает, что у вашего отражательного кода, по сути, нет никаких шансов фактически вызвать исключение.
Есть ли какая-то особая причина не использовать отражение? Если это производительность, вы можете сделать это один раз с отражением, а затем жестко закодировать полученное значение.