gpt4 book ai didi

Java Reflection 从字段中获取实例

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:40:29 24 4
gpt4 key购买 nike

有什么方法可以从字段中获取实例吗?
这是一个示例代码:

public class Apple {
// ... a bunch of stuffs..
}

public class Person {
@MyAnnotation(value=123)
private Apple apple;
}

public class AppleList {
public add(Apple apple) {
//...
}
}

public class Main {
public static void main(String args[]) {
Person person = new Person();
Field field = person.getClass().getDeclaredField("apple");

// Do some random stuffs with the annotation ...

AppleList appleList = new AppleList();

// Now I want to add the "apple" instance into appleList, which I think
// that is inside of field.

appleList.add( .. . // how do I add it here? is it possible?

// I can't do .. .add( field );
// nor .add( (Apple) field );
}
}

我需要使用反射,因为我将它与注释一起使用。这只是一个“示例”,方法AppleList.add(Apple apple)实际上是通过从类中获取方法,然后调用它来调用的。

然后这样做,例如:method.invoke(appleList, field);

原因:java.lang.IllegalArgumentException:参数类型不匹配

*编辑*这可能对正在寻找相同内容的人有所帮助。

如果类 Person 有 2 个或更多 Apple 变量:

public class Person {
private Apple appleOne;
private Apple appleTwo;
private Apple appleThree;
}

当我得到 Field 时,比如:

Person person = new Person();
// populate person
Field field = person.getClass().getDeclaredField("appleTwo");
// and now I'm getting the instance...
Apple apple = (Apple) field.get( person );
// this will actually get me the instance "appleTwo"
// because of the field itself...

一开始,单独看一行:(Apple) field.get(person);
让我认为它会去获取一个与 Apple 类匹配的实例。
这就是为什么我想知道:“它会返回哪个 Apple?”

最佳答案

田地本身并不是苹果——它只是一 block 田地。因为它是一个实例 字段,所以您需要一个声明类的实例才能获取值。你想要:

Apple apple = (Apple) field.get(person);

...当然,在 apple 字段被填充之后,实例被称为 person

关于Java Reflection 从字段中获取实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12848479/

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