java - Java 中的类引用

标签 java

有什么办法可以为类的名称创建一个引用变量吗?

例如,假设我们有这两个类

class ClassA {
    public static String s = "This is class A";
}

class ClassB {
    public static String s = "This is class B";
}

然后我们想像这样使用它们

// first somehow give the name of ClassA to some variable MyRef

// then print "This is class A"
System.out.print(MyRef.s); 

// then give the name of ClassB to the same variable MyRef

// and then print "This is class B"
System.out.print(MyRef.s);

有什么办法可以做到这一点吗? 如果没有,是否有其他简单的方法可以完成同样的事情,即轻松地在 ClassA 的静态变量和 ClassB 的静态变量之间切换?

最佳答案

最接近的方法是将 ClassA.classClassB.class 作为 Class 传递,然后使用反射来获取该类的字段及其值。

// TODO: Much better exception handling :) (It's almost never appropriate to
// throw Exception...)
public static String getS(Class<?> clazz) throws Exception {
    Field field = clazz.getField("s");
    return (String) field.get(null);
}

调用它:

String a = getS(ClassA.class);
String b = getS(ClassB.class);

一般来说,更好的解决方案是使用继承,但这需要某个父类(super class)或接口(interface)的实例,然后是方法而不是字段。当然,这可能不符合您的其他要求 - 我们对您想要做的事情的整体情况不太了解。

关于java - Java 中的类引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719204/

相关文章:

java - 将新数据追加到Arraylist

java - 来自 WSDL 的 SOAP 网络服务端点

java - 如何使用节点在链表中显示字符串

java - 将正则表达式应用于 str.split 方法时出现异常

java - 使用MapReduce执行组操作

java - Android程序修改

java - 是否可以在java流中使用when()初始化模拟

Java - SSL 服务器创建

java - 一些 JMenus 没有出现

java - 如何在 onClick 事件触发时更改 Fragment?