2013-10-04 45 views
-3

你好,大家好我想知道如何使用字符串項目例如調用類如何調用類使用字符串

class A { 
    String[] des = { "hi" }; 
} 

class Example { 
    public static void main(String[] args) { 
     String[] className = { "A", "B" }; 
     System.out.println(className.des[0]); // i wanted to call des array in 
               // a class with index equal to 0 
    } 
} 

從上面可以理解,我想一個字符串的內容將被用作在運行類呼叫者時間。是否有可能..(我必然會使用String作爲它)

+1

使用反射,雖然這並不明顯,那就是你要找的。在繼續之前,您可能需要查看Java語法。 –

+0

你可以告訴我使用代碼請 – user2829506

+0

不編輯,如果沒有得到qus..please我想動態給名稱,如果我已經知道它是類「A」爲什麼我會用這個..方法.. huh – user2829506

回答

0

您的代碼沒有多大意義,因爲des不是String數組className的字段。但是,看起來您正試圖訪問在類A中聲明的字段,僅基於該類的名稱作爲String值。由於des是一個實例字段,因此需要使用A的實例。你可以這樣做:

A a = (A) (Class.forName("A").newInstance()); 
System.out.println(a.des[0]); 

你將不得不添加代碼來處理這可能拋出的異常。還請注意,Class.forName的參數需要是類的全名,所以如果A是包(例如com.example)的一部分,則它必須是Class.forName("com.example.A")

下面是如何結合索蒂里奧斯Delimanolis和我的代碼放到一個完整的工作例如:

class Example { 
    static class A { 
     String[] des = { "Hi from class A" }; 
    } 

    static class B { 
     String[] des = { "Hi from Class B" }; 
    } 

    public static void main(String[] args) { 
     String[] classNames = { "Example$A", "Example$B" }; // inner class names 
     for (String name : classNames) { 
      try { 
       System.out.println(getDes0(name)); 
      } catch (Exception e) { 
       System.err.println("Could not get des[0] for class " + name); 
       e.printStackTrace(); 
      } 
     } 
    } 

    private static String getDes0(String className) 
     throws Exception // better to be explicit, but distracts from the answer 
    { 
     Class<?> cls = Class.forName(className); 
     Field field = cls.getDeclaredField("des"); 
     Object obj = cls.newInstance(); 
     String[] des = (String[]) field.get(obj); 
     return des[0]; 
    } 
} 
+0

我的代碼是動態調用類的,正如你在這裏所建議的,我仍然需要將類名稱指定爲「A」,所以沒有意義,所以我想僅使用字符串名稱作爲我的類名稱來解析des。 – user2829506

+0

@ user2829506如果你不知道類名,你怎麼能期望知道字段名或者如何將它用作'String []'? –

+0

和更多的信息des是在不同的類,我試圖動態調用.... – user2829506

0

Use Ted Hopp's solution.

我會後悔顯示這個給你,但只是踢

String className = "A"; // use the fully qualified name 
Class clazz = Class.forName(className); 
Field field = clazz.getDeclaredField("des"); 
field.setAccessible(true); 
A a = new A(); // if you don't know the actual type, you can declare it as Object and get it from somewhere 
String[] des = (String[])field.get(a); 
System.out.println(des[0]); 

很明顯,做相應的所有異常處理。

+0

你可以使用Object a = cla zz.getInstance()'得到一個實例而不是'A a = new A()'。不需要代碼依賴於實際的類(根據OP,它將會改變)。 –

+0

@TedHopp是的,在回答你的評論後,實際的對象可以來自外部。我在代碼片段中添加了一條評論。謝謝。 –