2011-12-14 15 views
1

今は2つの.javaファイルがあります。
Main.java:コンストラクタに静的変数にアクセスさせる

public class Main { 
    static int integer = 15; 
    NeedInteger need = new NeedInteger(); 
} 

とNeedInteger.java

public class NeedInteger { 
    System.out.println(integer); 
} 

は、もちろんこれは非常に単純化しているが、私はこれを達成することができます方法はありますか?

+1

変数をクラスコンストラクタに渡します。あなたはあなたの実際のニーズに関してより具体的にする必要があります。 –

+0

私が2番目のクラスのインスタンスを2000個ほど持っているとしましょう。すべてがMainクラスで作成された3次元のString配列にアクセスする必要があります。 – BarrensZeppelin

+0

私はあなたが 'String [] [] [] array = Main.threeDimensionalStringArray;以外の何かを意味すると仮定します;あなたは他のクラスや他のものから静的変数を参照する方法を尋ねていますか? – Gray

答えて

2

多くの人が答えましたように、正しい方法は新しいクラスのコンストラクタに値を渡すことです。

何らかの理由でそれを行うことができない場合は、Mainで公開静的アクセサメソッドを使用して値にアクセスします(これは、フィールドをpublicにするよりも少し良いでしょう)。

など。

public class Main 
{ 
    private static int integer = 15; 

    public static int getInteger() 
    { 
    return integer; 
    } 
} 

public class NeedInteger 
{ 
    public NeedInteger() 
    { 
    int integer = Main.getInteger(); 
    } 
} 
1

変数をクラスコンストラクタに渡します。

配列リファレンスはちょうどリファレンスです。

または、クラス自体を渡すことも、静的(meh)を使用することもできます。

1

(あなたもそれを格納する必要がある場合や、必要に応じてメンバー)NeedIntegerにコンストラクタを追加します。

public class Main { 
    static int integer = 15; 
    NeedInteger need = new NeedInteger(integer); 
} 
+0

これは素晴らしいアイデアのようですが、クラスのすべてのインスタンスに私の巨大な配列を格納しませんか? – BarrensZeppelin

+0

配列は参照であるため、実際の内容ではなく参照のみをコピーします。だからそれは問題ではない。 – Tudor

+0

@ user1098680いいえ、配列参照を渡した場合、配列の参照ではなく、配列のコピーがあります。 –

1

あなたが持っているでしょう:あなたは、インスタンスを作成するときに、あなたの値を渡す

public class NeedInteger { 

    private int integer; 

    public NeedInteger(int integer) { 
     this.integer = integer; 
     System.out.println(integer); 
    } 
} 

をいくつかの不正なjujuの動き(グローバル変数の使用など)を行うか、コンストラクタに渡します。

注:お使いの

public class NeedInteger { 
    System.out.println(integer); 
} 

は、その中に方法はありません。私はこれを次のように書き直すことをお勧めします:

public Class NeedInteger { 
    NeedInteger(int integer) { 
    System.out.println(integer); 
    } 
} 

実際に作業を施工したい場合は、

編集:上記のコメントから。

代わりに、その構造のクラスがあります。

public Class NeedStringArray { 
     NeedStringArray(String[][][] stringArr) { 
      //work with String array here 
     } 
} 

実際の配列が渡され、それへの参照のみされないため、本当の追加のオーバーヘッドを持っていません。配列finalなどを配列に設定して、NeedStringArrayコンストラクタで編集しないようにしたい場合があります。

1

整数はプライベートなので、NeedIntegerではアクセスできません。パブリックにするかセッターやゲッターを使用する必要があり、静的なのでMain.integerを使う必要があります。

一般に、コンストラクタで設定します。

+0

public static integerを実行した場合、私の新しいインスタンスはMain.integerでアクセスできますか? – BarrensZeppelin

+0

はい。 staticはインスタンスが1つしかないので、Main.integerを実行することを意味します。それが変数でない場合は、Main i = new Main();とi. – tehdoommarine

+0

これは最も簡単な解決策のようです。 – BarrensZeppelin

1

あなたのコメントはsingleton に配列をホストするか、2番目のクラスがコンストラクタ内の配列への参照を受け入れるように提案されているものがあります。次に、依存関係注入フレームワーク(Guiceなど)を使用してワイヤを結ぶことができます。

関連する問題