2010-10-25 21 views
1

夥計, 我有一個與Java動態類加載稍有不同的問題。我必須將一個對象(允許類A的對象A1)傳遞給類B的另一個對象B1的構造函數,以便將A1的細節存儲在B1中。 B1不知道它正在接收什麼樣的對象。所以它只知道A1是一個對象。在JAVA中動態加載一個類 - 異常

現在我有類B中的函數,它接受對象C1並檢查它是否等於對象A1。所以基本上我要檢查

  1. 如果對象是C1型A級的也(其實我不是過去的這一點。)
  2. 如果對象內的值是相同的

我嘗試的解決方案:

當存儲內部B1對象A1,我還存儲類「A」的名稱,因爲對象B1僅獲取對象A1而不是類名A.


public static void testing(Object C1, String s) //testing is the function of B called by B1 
    { 
     try{ 
      Class c = Class.forName(s); 

      if(C1 instanceof c) // This is throwing error stating c cannot be resolved to a type 
      { 
       //further checking 
      } 


     }catch (Exception e){ System.out.println(e);} 
    } 

我一直在嘗試使用不同的代碼來獲取類型的實例來進行instanceof()比較,但我不成功。任何建議?

我甚至試過,但同樣的錯誤


ClassLoader classLoader = B.class.getClassLoader(); 

     try{ 
      Class class11 = classLoader.loadClass(s); 
      if (C1 instanceof class11) 
      { 

      } 
      }catch (Exception e){ System.out.println(e);} 

如何進行的將是非常有幫助的任何指針!

解決方案是使用:isInstance代替的instanceof

,還附有此問題的其他問題。讓我用我的下面的評論更新它。現在,我必須比較B1中A1和C1兩個值中的一個值,比如說AGE。現在我該怎麼做?如果我嘗試函數或值,我會給我編譯器錯誤,因爲編譯器仍然不知道對象C1和A1的類類型。我也可以保存X1而不是A1。現在我可能需要檢查一個不同的屬性檢查,如ADDRESS。這大大改變了問題的層面。

+0

無需在您的問題的答案。相反,只需接受解決您問題的答案(通過點擊答案左側的綠色複選標記)即可。此外,如果您在解決此問題後還有其他問題,請爲每個問題提出一個新問題。 – Grodriguez 2010-10-25 07:06:30

回答

4

instanceof運算符僅適用於靜態加載的類。對於動態加載的類,請使用Class類中的isInstance方法。

if (class11.isInstance(C1)) { 
    // do something 
} 
+0

非常感謝。幾乎一天的時間都讓我頭腦發熱。 – bsoundra 2010-10-25 06:31:06

+0

我有另一個查詢。不知道是否可以在這裏發佈。由於它與上述相關,我將在此處發佈。如果有任何問題,我會開一個新的問題 我現在必須比較一個值,比如AGE,在C1和A1中,這在B1裏面。現在我該怎麼做?如果我嘗試函數或值,我會給我編譯器錯誤,因爲編譯器仍然忘記了對象C1和A1的類類型。 – bsoundra 2010-10-25 06:37:06

+0

打開一個新問題。 – 2010-10-25 07:00:26

2

使用Class.isInstance()代替instanceof操作者:

if (c.isInstance(C1)) { 
    [...] 
} 

注:

  • instanceof操作者只能在類型(其是在編譯時已知的)一起使用。
  • isInstance()方法在java.lang.Class對象上調用。
1

的instanceof cunstruction需要類型,而不是引用類對象:

if (C1 instanceof MyClass) { 
    // ... 
} 

您可以使用:

if (c.isnstance(C1)) { 
    // ... 
}