TL;DR这是一个有趣的编程挑战,但我发现它在现实生活场景中几乎没有用处。
这里第一个字符串变量的名字是事先知道的,你可以直接把最终的值存储在这个里面,而不是迂回的存储第二个变量的名字。
如果理解正确,您正在尝试访问名称将在另一个字符串变量中的类的(字符串)变量。这可以使用 java 反射来实现。
此外,您希望将此代码放置在接口中,以便可以(重新)在所有实现它的类中使用它。
import java.lang.reflect.Field;
interface Foo {
public default String getStringVar()
throws NoSuchFieldException, IllegalAccessException {
// get varName
Class thisCls = this.getClass();
Field varNameField = thisCls.getField("varName");
String varName = (String) varNameField.get(this);
// get String variable of name `varName`
Field strField = thisCls.getField(varName);
String value = (String) strField.get(this);
return value;
}
}
class FooImpl1 implements Foo {
public final String varName = "str1";
public String str1 = "some value";
}
class FooImpl2 implements Foo {
public final String varName = "str2";
public String str2 = "some other value";
}
class Main {
public static void main(String[] args)
throws NoSuchFieldException, IllegalAccessException {
System.out.println(new FooImpl1().getStringVar());
System.out.println(new FooImpl2().getStringVar());
}
}
在这里,我在实现 interface 的类中有两个 String 成员Foo
。第一个varName
包含第二个String的变量名,第二个String变量包含数据。
在使用反射的界面中,我首先提取存储在 中的变量名称varName
,然后使用它提取第二个字符串的值。