如何通过Java中的类名访问静态变量?

时间:2014-06-18 08:10:27

标签: java class oop

我有很多具有相同静态属性的类(staticAttr),我有另一个接受类名的类,并访问其指定类名的staticAttr。 我怎样才能做到这一点。请帮我! 感谢。

编辑:

        public class Group_name1 extends Activity implements View.OnClickListener,
        {
            public static Group_name1 staticVar;

            public void onCreate(Bundle savedInstanceState) 
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.group_name1);
                staticVar = this;
            }
         }
         public class Group_name2 extends Activity implements View.OnClickListener,
            {
                public static Group_name2 staticVar;
                public void onCreate(Bundle savedInstanceState) 
                {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.group_name2);
                    staticVar = this;
                }
             }

现在我的问题是通过给出一个类名字符串来访问另一个类中这些类的静态变量。现在该类可用于获取包含该对象的staticVar。

目前,我已经为上面提到的每个类创建了单独的类来引用staticVar。但我觉得它的冗余和糟糕的编程风格,因为我为参考上述类编写的每个类都执行相同的功能。唯一改变的是类名引用

Group_name1 grpActivity; Group_name2 grpActivity;

这些是我目前的实施。但我想只使用类名来引用静态变量

class GroupNameListener1 extends Thread
{
    Group_name1 grpActivity;
        public void run()
        {
               grpActivity = Group_name1.staticVar;
               /*
                    do something
                */
        }
}
class GroupNameListener2 extends Thread
{
    Group_name2 grpActivity;
        public void run()
        {
               grpActivity = Group_name2.staticVar;
               /*
                    do something
                */
        }
}

3 个答案:

答案 0 :(得分:0)

像这样:

ClassWithStaticVariable.VariableName

如果你有

class A {
  public static String a = "test"
}

然后您可以像这样访问它:

class B {
  public void test() {
    System.out.println(A.a);
  }
}

答案 1 :(得分:0)

如果我正确理解你,你会有类似

的东西
class A {
  public static String str = "test"
}

在您的代码中,您有一个像

这样的方法
void methodA (A someObj) {

在此方法中,您可以访问静态变量

as

   A.str

  someObj.str

答案 2 :(得分:0)

你所拥有的是非常糟糕的设计。如果没有反思,就无法在设计时解决这个问题。

我相信您要做的是将元数据附加到您的课程中。一个非常简单的方法是保持一个包含数据的全局映射(并使用类而不是其名称):

public class MyClassMetaData {
    private final static Map<Class<?>, String> dataMap = new HashMap<>();

    static {
        dataMap.put(MyClassA.class, "TestA"); // one method of initialization
        dataMap.put(MyClass2.class, "Case2");
        // one line per class...
    }

    private MyClassMetaData() {
    }

    public static String getMetaData(Class<?> theClass) {
        return dataMap.get(theClass);
    }
}

但是你需要记住在添加另一个类时添加一行将数据放入静态块的行。

如果需要动态初始化数据,可能需要同步对地图的访问。