gpt4 book ai didi

java - 如何确定字段在哪个类中声明

转载 作者:行者123 更新时间:2023-12-01 19:12:16 26 4
gpt4 key购买 nike

有没有办法确定在哪个类中从此类代码声明字段:

类myObjClass = myObj.myField.getWhereDeclaredClass();

编辑:也许我没有正确表达自己。考虑 myObj 类如下:

class MyObj {
MySecondObj myField = new MySecondObj ();
}

myField 不是 java.lang.reflect.Field 类型,并且我不想将硬编码字符串 literlas 与 getField (String) 一起使用。语法必须是:

myObj.myField.getWhereDeclaredClass ()

有办法做到这一点吗?

最佳答案

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

编辑:

我个人不知道有什么方法可以不经过反射(reflection)就做到这一点。再说一遍,编写“.myField”意味着您知道该对象具有该字段,因此从某种意义上说它仍然是硬编码的,并且它还意味着您的反射代码实际上基本上没有机会抛出异常。

有什么特殊原因不使用反射吗?如果是性能,您可以通过反射执行一次,然后对获得的值进行硬编码。

关于java - 如何确定字段在哪个类中声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8015870/

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