2014-06-18 72 views
0

我有很多類具有相同的靜態屬性(staticAttr),我有另一個類,它接受類名稱並訪問其指定類名稱的staticAttr。 我該如何做到這一點。請幫幫我! 謝謝。如何通過Java中的類名訪問靜態變量?

編輯:

 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 
       */ 
     } 
} 
+2

使用反射盧克http://docs.oracle.com/javase/tutorial/reflect/ –

+0

你可以使用反射,但可以得到混亂。爲什麼不用一個通用的接口來實現你的所有類,並且定義一個靜態方法(而不是靜態變量),每個類都可以實現返回。 – JonathanS

+0

請檢查我的編輯。 – Vamshi

回答

0

像這樣:

ClassWithStaticVariable.VariableName

,如果你有

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

那麼你就可以訪問它像這樣:

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

如果我理解正確你,你有什麼樣

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

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

void methodA (A someObj) { 

的方法在此方法中,你可以訪問靜態變量

A.str 

someObj.str 
+0

@Vamshi語法'someObj.str'雖然接受它不是推薦雖然,所以更喜歡'A.str' – Eypros

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

但是你需要記住補充說,將數據輸入線當您添加另一個類時,將地圖放入靜態塊中。

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

+0

重構我的代碼的最佳方式是什麼? – Vamshi