Извините за титул ...Отражение полезно?
У меня есть метод, как Foo() используется, как показано ниже
public static <T> void foo(T fld1, T fld2) {
// here i use some info from fld1 and some from fld2 in order
// to do something
}
foo(a1.myField, a2.myField)
- Я хочу быть уверен, что во время компиляции, что MyField действительно поле объект
- Я хочу, чтобы избежать необходимости повторить
.myField
два раза - Я хочу, чтобы один не может вызвать метод как
foo(a1.myField, a2.anotherField);
Я не знаю, является ли отражение ответом на мою проблему.
я могу написать что-то вроде этого:
static <C> void foo(C o1, C o2, String fieldName) {
try {
Object fld1 = o1.getClass().getField(fieldName).get(o1);
Object fld2 = o2.getClass().getField(fieldName).get(o2);
// here i use some info from fld1 and some from fld2 in order
// to do something
} catch (Exception e) {
}
}
, но я не могу проверить во время компиляции, если FIELDNAME является допустимым именем поля для класса C
Было бы полезно иметь метод
Field getField(Object field)
так что
getField(a1.myField)
равно
a1.getClass().getField("myField")
Сейчас я пишу этот метод:
public static <T> Field getField(T o, Object fld) {
Field rv = null;
try {
Field[] fields = o.getClass().getFields();
for (Field field : fields) {
Object f = field.get(o);
if (f==fld) {
rv = field;
break;
}
}
} catch (Exception e) {
}
return rv;
}
и использовать этот способ
getField(a1, a1.myField);
Спасибо за любой ответ, Carlo
Возвращает ли myField и anotherField один и тот же тип? Или какой тип они возвращаются? – Damian0o
myField и anotherField имеют один и тот же тип (иначе я получаю ошибку компиляции), но я хочу этого избежать. Я хочу, чтобы fld1 и fld2 были одним и тем же полем двух разных экземпляров одного и того же класса – Carlo