2012-02-08 26 views
1

私は書かれているコードの一部を削減しようとしています。私はこれを試して別のクラスを作成しました。そのクラスは正しく動作していますが、古いクラスは別のクラスにある変数を使用します。これらの変数にはどうすればアクセスできますか?残念なことに、私はこれのコードをすべて共有することはできませんが、私は必要と思う小さな部分を出すことができます。ヘルプ別のクラスから変数を取得

これは私が今変数を持参しようとしています古いクラスからでてくれてありがとうへの:私はあなたがメンバーのためにゲッターを書くことができます

// XComponentLoader loader = null; 

fixture.execute(new OpenOfficeOpener()); 
component = loader.loadComponentFromURL("file:///"+System.getenv("BONDER_ROOT") + "/ControlledFiles/CommonFiles/"+spreadsheet, "_blank", 0, loadProps); 
+0

ローダーと他のクラスの定義方法によって異なります。他のクラスとローダ変数の詳細を提供する。 – kosa

+0

少し詳しく説明できますか?私はあなたが何を意味するのかは分かりませんが、クラスBのクラスAのフィールドにアクセスするのはかなり簡単です(通常はゲッターを呼び出します)。それで問題はどこですか? – Thomas

答えて

0

上で「ローダー」を持参しようとしていることあなたは外に見える必要があります。例:

public class MyClass { 
    private int member1; 
    private String member2; 

    public int getMember1() { 
     return member1; 
    } 

    public String getMember2() { 
     return member2; 
    } 
} 

すぐmember1member2両方が外部からアクセスすることができます。

0

問題にはいくつか解決策があります。私がお勧めするのは、クラスに新しいプログラムに値を返すメソッドを追加するか、それをパラメータとして渡すことです。 より高いレベルでのこの一例は次のようになります。あなたは、静的フィールドを探しているような場合であれば、あなたはほぼ確実にあなたの現在のデザインを再考ものの

x = newClass.getValX()

0

それは、聞こえます。

public class YourClass { 

    private static XComponentLoader loader; 

    public YourClass() { 
     YourClass.loader = new XComponentLoader(); 
    } 


} 

そして、別のクラスからアクセスするには:

public YourOtherClass { 
    public void yourMethod() { 
     YourClass.loader ... 
    } 
} 
0

loaderのようなもの行うよりも、静的な場合:

component = TheOtherClass.loader.loadComponentFromURL(... 

をそうしないと、あなたの新しいクラスはインスタンスへの参照を必要とします他のクラスの

public class NewClass { 

    private OldClass oldClass = null; 
    public NewClass(OldClass oldClass) { 
     this.oldClass = oldClass; 
    } 

    // ... 

     fixture.execute(new OpenOfficeOpener()); 
     // assuming, loader is a public field on OldClass. 
     // a getter (getLoader()) is preferred 
     component = oldClass.loader.loadComponentFromURL("file:///"+System.getenv("BONDER_ROOT") + "/ControlledFiles/CommonFiles/"+spreadsheet, "_blank", 0, loadProps); 

    // ... 
} 
0

私は2つのクラスに機能を分割しました。次に、1つのクラスを別のクラスにインスタンス化することができます。

新しいコードをクラスBに入れた場合は、次のようになります。

public class A { 
    // Class B instance 
    B b = new B(); 

    public void doSomething() { 
     b.loadComponentFromURL("someurl"); 
    } 
} 

ローダーがインスタンスの場合は、このように呼び出すことができます。

b.getLoader().loadComponentFromURL("someurl"); 
関連する問題