gpt4 book ai didi

java - 如何获取指向其他类中对象的java(弱)引用的字段名称?

转载 作者:行者123 更新时间:2023-12-01 07:15:50 27 4
gpt4 key购买 nike

假设我有以下情况:

Test1.java

import java.lang.ref.WeakReference;
public class Test1
{
public WeakReference fieldName;

public init()
{
fieldName = new WeakReference(this);
Test2.setWeakRef(fieldName);
}
}

Test2.java

import java.lang.ref.WeakReference;
public class Test2
{
public static setWeakRef(WeakReference weakRef)
{
//at this point I got weakRef in an other class.. now, how do I get the field name this reference was created with? So that it returns exactly "fieldName", because that's the name I gave it in Test1.java?
}
}

在评论的位置,我收到了在其他类中创建的弱引用。我如何检索创建此弱引用的字段名称(在本例中为“fieldName”)?

提前致谢。

最佳答案

唯一的方法是使用反射。这对于任何类型的字段都是如此,而不仅仅是弱引用。

Field[] fields = Test1.getDeclaredFields();

for (Field field : fields) {
if (field.getType().equals(WeakReference.class) {
System.out.println(field.getName());
}
}

当然,只有当 Test1 中有一个 WeakReference 字段时,此示例才有效。

更新:如果您有多个引用字段,则需要访问对象本身,以便获取特定字段的实际值并将其与收到的值进行比较。就像这个修改后的代码示例一样:

public class Test2 {    
public static setWeakRef(Test1 instance, WeakReference weakRef) {
Field[] fields = Test1.getDeclaredFields();

for (Field field : fields) {
if (field.getType().equals(WeakReference.class) {
WeakReference value = (WeakReference) field.get(instance);
if (value == weakRef) {
System.out.println(field.getName());
}
}
}
}
}

请注意,为了简单起见,省略了异常处理。

关于java - 如何获取指向其他类中对象的java(弱)引用的字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2728399/

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