0

javaファイルにPrivateメソッドがあり、その中にmaxRateという変数があります。別の変数minRateと比較するには、別のJavaファイルのmaxRateの値が必要です。

maxRate変数を別のJavaファイルに表示するにはどうすればよいですか?

私のコードは次のとおりですA.java(diffパッケージ内)

public class A{

  private Integer maxRate = null;

  private modelAndView dConfig(int a,string b,string c, string d, string e){
    Map<String, PropConf> map = getConf(b,c,d,e);
    PropConf propConf = map.get(getKey(a));
    Integer maxRate = propConf.getMaxRate();
  }
}

問題:別のパッケージにあるB.javaのmaxRateの値が必要です。

進捗:

今のところ、提案に従って、パブリッククラスA {内の一番上でmaxRateをプライベート整数maxRateとして宣言し、次のようにA.javaでgetterメソッドも宣言しました。

public Integer getMaxRate(){
return this.maxRate
}

次に、B.java内からgetMaxRateを次のように呼び出してみました。B.java

public ModelAndView save() {

A a = new A();
Integer f = a.getMaxRate();
logger.debug("F is" +f); }

f値はnullとして出力されました。

4

5 に答える 5

2

メソッドの内部にはアクセスできません。関連する getter を持つクラス レベルのフィールドにするか、メソッドから返します。

于 2013-02-25T08:22:55.053 に答える
0

プライベート関数の外部で変数を定義し、それをパブリックとして定義する必要があります。プライベート関数の外部で定義して(プライベートに保つ)、パブリックゲッターやセッターを追加することもできます。より明白なパブリックgetting/setterメソッド、およびパブリッククラス変数オプションは他の回答でカバーされているため、ここでは、クラスからプライベートフィールドを抽出するための、はるかに一般的ではなく、より複雑な方法です。まず、変数は、関数内のプライベート関数フィールドの外側で宣言する必要があります(おそらくJavaバイトコードを読み取るプロジェクトでは):リフレクションからもアクセスできません:

Field f = obj.getClass().getDeclaredField("maxRate");
f.setAccessible(true);
Integer secretInt = (Integer) f.get(obj);
于 2013-02-25T08:22:43.063 に答える
0

dConfig 内で method2 を呼び出し、変数を直接method2に渡す場合を除いて、別のメソッドからメソッド変数にアクセスすることはできません。

private modelAndView dConfig(){

    method2(maxRate);

}

あなたの問題に対する可能な解決策は、次のようになる可能性があります...

変数 maxRate をプライベート クラス変数にすることができます。

private Integer maxRate = 9;

public getter メソッドを追加します。

public Integer getMaxRate() {
    return this.maxRate;
}

更新のための編集:

コードは次のようになります。

public class A {

  private Integer maxRate;

  public A() {
    this.maxRate = 9; //Initialize of the variable
  }

  public Integer getMaxRate() {
    return this.maxRate;
  }
}

私のコメントで言ったように、変数の初期化部分が欠落しているようです。

于 2013-02-25T08:26:12.473 に答える
0

オブジェクト指向プログラミングの概念を根本から見直す必要があります。あなたの問題は変数の可視性の問題よりも深く、むしろ不適切なクラス構造に関連しているのではないかと真剣に疑っています...

このシナリオに直接対処するには、深く掘り下げずに、次のアプローチが有効です。

public class MyClass {
    //instance variable: this can be different in 
    //each instances of this class. Now we initialize it to null
    private Integer maxRate=null; 

    private modelAndView dConfig(){

        //IMPORTANT!!!!!! Don't **declare** a new variable maxRate!
        // Your code Integer maxRate = 9; **declares a new one**
        // that would hide your class variable with a enw variable, 
        // whose scope is the method only

        maxRate = 9; //this sets the instance variable
        //this only happens when running the method
        //... I assume there are quirte some code here

    }

    /**
     * This function is available for each MyClass instance, and retrieves the
     * coresponding maxRate value.
     */
    public Integer getMaxRate() { 
         return maxRate;
    }

    //... other code
}

編集

このコンストラクトの使用に問題があるようです。私のアドバイスに耳を傾け、OOP とは何かを読んでください。座ることさえできずに走ろうとしています!

クラス B の関数から、これを行う必要があります。

public ModelAndView save() {

    A a = new A(); //created class A -- initialized maxRate to null!!
    //now need to run the method that sets the instance variable:
    a.dConfig(); // maxRate set to 9, or whatever.

    //don't use single char variable names! also, f is for float, if something!
    Integer maxRate = a.getMaxRate();

    //surprise. 
    logger.debug("F is" +f); 
}

完全なコードを開示していないので、何を達成しようとしているのか推測することしかできません...

また、ガイダンスが必要なように思われるため、いくつかのアドバイス:

  • Java の変数スコープについて読む
  • OOPを読む
  • Java命名規則に従う
  • クリーンコードについて学ぶ
于 2013-02-25T08:26:38.880 に答える
0

その変数の値を取得する getter メソッドを作成できますが、インスタンス変数として宣言する必要があります。

public class A {
    private Integer maxRate;

    public Integer getMaxRate() {
        return this.maxRate;
    }

    private modelAndView dConfig(){
        this.maxRate = 9;
    } 
}
于 2013-02-25T08:26:41.357 に答える