簡體   English   中英

如何通過Java中的類名稱訪問靜態變量?

[英]How can i access a static variable by a class name in Java?

我有許多具有相同靜態屬性(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
                */
        }
}

像這樣 :

ClassWithStaticVariable.VariableName

如果你有

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

那么您可以像這樣訪問它:

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

如果我正確理解您的意思,

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

在你的代碼中,你有一個像

void methodA (A someObj) {

在這種方法中,您可以訪問靜態變量

   A.str

要么

  someObj.str

您所擁有的是非常糟糕的設計。 缺乏反思,您無法在設計時以一般方式解決此問題。

我相信您正在嘗試將元數據附加到您的類上。 一種非常簡單的方法是使全局映射保存數據(並使用類而不是其名稱):

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);
    }
}

但是您需要記住添加一行,以便在添加另一個類時將數據放入映射中的靜態塊中。

如果需要動態初始化數據,則可能需要同步訪問地圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM