gpt4 book ai didi

java - 反射(reflection)有用吗?

转载 作者:行者123 更新时间:2023-12-01 18:47:29 25 4
gpt4 key购买 nike

对不起,这个标题...

我有一个像 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);

感谢您的回答,卡洛

最佳答案

您可以在运行时使用方法中的instanceOf进行检查。

只是例子:

if(fd1 instanceOf Fd1Obj)

关于java - 反射(reflection)有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17166941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com