java - 反射(reflection)有用吗?

标签 java reflection

对不起,这个标题...

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

相关文章:

java - 是否可以重新初始化类中的静态可变字段?

c# - 使用反射查找具有接口(interface)参数的构造函数

java - 为什么这个 JMock 测试失败?

java - Toast 如果 EditText 为空

c# - 在 .NET 2.0 中将对象转换为 IEnumerable

java |反射获取构造函数

java - 二月 java.util.Calendar 的奇怪行为

java - Scala如何一步实例化内部类?

java - Hibernate使用命名策略生成pk ID

c# - 反射(reflection)——检查父类