gpt4 book ai didi

Java OOP 传递 'inner' 字段

转载 作者:行者123 更新时间:2023-12-01 11:20:36 25 4
gpt4 key购买 nike

我正在使用 Java 语言进行面向对象编程,我有了一些想法,但我现在确信它可以实现。

class Class()
{
int a,b,c;
...

public void method(int x){...}
...

}

现在是否可以传递位于该类中的变量名称,如下所示:

obj.method(a);

我知道有两种方法可以做到这一点:
1. 传递obj.a
2. 传递某种id并在method()

中解析该id

但我很好奇是否可以仅传递变量名称?

更好的解释:我的问题是否可以传递包含变量名称的字符串,然后在方法中解析它并获取对其的引用?

最佳答案

您似乎想要将参数名称传递到方法中,然后用该参数做一些事情。您似乎有意不提供问题的任何上下文,这使我相信您只是对可能性感兴趣,并且不希望在实际应用程序代码中使用它。因此,我将向您展示以供引用:

public void method(String parameterName) {
try {
// We can get the current field value:
int value = (int) getClass().getField(parameterName).get(this);

// And update it (for example, set it to 23)
getClass().getField(parameterName).set(this, 23);
catch (NoSuchFieldException | IllegalAccessException ex) {
// Field does not exist or is not public.
}
}

它可以按如下方式使用(这会将字段 a 的值设置为 23(如果存在)。

MyClass instance = new MyClass();
instance.method("a");

请注意,这要求该字段是公共(public)的。对于非公共(public)字段也可以这样做,但这是一个更糟糕的想法,因为它绕过了 Java 的整个访问控制机制。有更好的解决方案涉及使用 Map对象来实现类似的结构。这些绝对比使用这个更好。

最后一句话(这一点我怎么强调都不为过):不要在实际代码中使用反射调用!没有它总是可以完成您需要的一切(例如,使用 Map<String, Integer> 而不是单个字段)。

关于Java OOP 传递 'inner' 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271428/

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