gpt4 book ai didi

java - 通过 "String concatenation"获取对象

转载 作者:行者123 更新时间:2023-11-29 08:45:50 27 4
gpt4 key购买 nike

使用“字符串连接”我可以通过其完全限定的类名获得类对象:

String s = "Foo";// package
String s2 = "bar";// Class
Class c=Class.forName(s+"."+s2);

我如何做对象等效:

String s = "Foo";// portion of Object's name
String s2 = "bar";// another portion of Object's name
JButton foo_Bar = new JButton();

JButton o = Object.forName(s+"_"+s2);// Using "String concatenation" (key phrase) to obtain Object

任何方式(简单或其他方式)保留使用“字符串连接”

最佳答案

只有当您尝试获取的对象是类变量(在方法外部定义,作为类的一部分)时才有可能。

然后您可以使用 Java 的反射 API 通过字段名称访问字段的值。实现此目的的代码如下所示:

public class Example {
public JButton foo_bar = new JButton("I am a Button");

public void fieldByNameExample() throws NoSuchFieldException, IllegalAccessException {
// The two parts we're going to concatenate to make "foo_bar"
String partA = "foo";
String partB = "bar";

// Gets the Field object representing the field by its name.
Field field = Example.class.getDeclaredField(partA + "_" + partB);
// Retrieves the contents of the Field for this object.
JButton value = (JButton) field.get(this);
System.out.println(value.getText()); // prints: "I am a Button"
}
}

您需要捕获 NoSuchFieldException(当不存在具有给定名称的字段时抛出)和 IllegalAccessException(当您尝试获取该字段的内容时抛出在当前上下文中不可访问)当您调用上述方法时。

如前所述,这仅在变量被声明为类中的字段时才有效。在方法内部声明的变量是不可能的(因为编译器会在编译过程中丢弃此类局部变量的名称)。

请注意反射 API 可能相对较慢,使用它通常不是最佳解决方案。您还应该研究其他解决方案来解决您的问题。如果您仍然坚持使用 Reflection,我建议您首先查看有关 Java Reflection 的文档,因为如果您不确切知道自己在做什么,Reflection API 是相当难以使​​用的。

关于java - 通过 "String concatenation"获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25451420/

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