簡體   English   中英

如何對不同的類使用相同的變量名

[英]How to use same variable name for different classes

我正在嘗試使用變量實例化不同的類。 例如:

Object blah;
class1 ex1;
class2 ex2;

public void test(int i){
    if(i == 1){
        blah = new class1();
    } else {
        blah = new class2();
    }
} 

我將如何在Java中執行此操作?

編輯1:抱歉,讓我現在嘗試更加具體。

假設我有三個班級:A,B和C。

A是我的主要人並在其中使用B。B使用C。

問題是這樣的:

public class B1{
    C instanceC;

    public B1(){
    instanceC = new C();
    //uses a method of instanceC.
    }
}
public class B2{
    C instanceC;

    public C(){
    instanceC = new C();
    //uses a method of instanceC.
    }
}

然后在A:

public class A implements MouseListener{
    Object blah;
    B1 instanceB1;
    B2 instanceB2;

    public void test(int i){
        if(i == 1){
            blah = new B1();
        } else {
            blah = new B2();
        }
    }
//I left the other mouseListener methods blank
    public void mouseReleased(int i){
        blah.instanceC.someMethod();
    }

    public static void main(String[] args) {
        A instanceA = new A();
        A.test(1);
    }
}

編輯2:當我嘗試使用instanceC.someMethod()或instanceC.someVariable時,它給了我一個空指針異常。

我希望這足夠清楚。 如果令人困惑,請告訴我,我將看看是否可以進一步簡化。 感謝已經幫助過的人們!

如果blah被聲明為Object ,那將是可行的(除非您使用帶有實例而不是類的new ),但是在其上使用Object任何方法或屬性將很尷尬。

通常的方法是通過interfaces 接口定義了class1class2的共同特征,然后使用該接口聲明blah 然后,您可以輕松地使一個或另一個具體類成為一個類,並可以使用它們的共同特征。

例如:

interface Foo {
    void someCommonMethod();
}

class Class1 implements Foo {
    void someCommonMethod() {
        // implementation
    }
}

class Class2 implements Foo {
    void someCommonMethod() {
        // implementation
    }
}

public void test(int i){
    if(i == 1){
        blah = new Class1();
    } else {
        blah = new Class2();
    }

    // ...use `someCommonMethod` on `blah`...
}

您的代碼永遠不會編譯。

  • 什么是B1和B2? 它們中的C()是什么,簽名就像構造函數一樣,但名稱卻不同。 如果不是構造函數,那么如何確保在B1B2初始化instanceC
  • 什么是A instanceA = new instanceA(); 應該是A instanceA = new A(); 然后調用instanceA.test()

如果我的假設是正確的,那么您正在嘗試訪問兩個不同對象的instanceC ,問題是,“是否始終將其命名為instanceC?”,如果是這種情況,請使用反射,並按名稱查找字段。

如果要遍歷類的所有字段並對其進行處理,請再次使用反射並遍歷字段,檢查其類型並為適當的字段類型調用該方法。

暫無
暫無

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

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