0

私は日付と呼ばれるクラスを持っています:

public class Date{
    private String monthAndDate;
    public Date(String inputMonthAndDate){
        monthAndDate = inputMonthAndDate;
    }
}

私は患者と呼ばれる別のクラスを持っています。クラス Date から monthAndDate の構文を取得し、それをクラス Patient のプライベート フィールドに渡すことは可能ですか?

ありがとうございました。

4

9 に答える 9

6

Dateクラスにゲッターを追加しないわけではありません。これは、フィールドを非公開にするポイントの一部です。

于 2012-11-16T17:29:09.350 に答える
1

これはリフレクションで簡単に実現できますが、それがDate自分の制御範囲外であり、これを行うための正当な API がなく、すべての結果を考慮した後に絶対に取得する必要がある場合にのみお勧めします。

于 2012-11-16T17:30:48.643 に答える
1

プライベート フィールドにアクセスするためのサンプル シナリオは、次のコード内にあります。

public class Date
{
    private String monthAndDate;

    public Date(String inputMonthAndDate)
    {
        monthAndDate = inputMonthAndDate;
    }

    public String getMonthAndDate()
    {
        return monthAndDate;
    }
}

public class Parent
{
   private yetAnotherField;

   Parent()
   {
       this.yetAnotherField = (new Date("some string")).getMonthAndDate();
   }
}
于 2012-11-16T17:30:58.237 に答える
1

それを行う2つの方法:

-GetterフィールドmonthAndDateに使用しComposition、このフィールドにアクセスする必要があるクラスで原則を使用します。

-を使用Reflectionすると、初心者には少し難しくなります。

于 2012-11-16T17:31:31.440 に答える
1

ではありませんがprivate、「パッケージプライベート」の使用を検討しましたか? 何かが「パッケージ プライベート」である場合、同じパッケージ内の他のクラスからのみ見ることができます。紛らわしいのは、キーワードがないことです...これはデフォルトのスコープです。

于 2012-11-16T17:31:42.223 に答える
1

データのカプセル化の概念を破ろうとしています。 privateフィールド/メソッドは、クラス内でローカルにのみアクセスでき、他のクラスでは使用できません。

クラスで値getMonthAndadte()を返すなどのアクセサ メソッドを追加します。monthAndDateDate

于 2012-11-16T17:30:23.303 に答える
1

注: 標準の JDK で既に使用されている名前でクラスを命名することは避けてください。

あなたの質問に答えるには、 Date クラスに getter を提供するだけです:

public class Date{
    private String monthAndDate;
    public Date(String inputMonthAndDate){
        monthAndDate = inputMonthAndDate;
    }
    public String getMonthAndDate(){
        return monthAndDate;
    }
}

次のように呼び出すことができます。

String s = someDate.getMonthDate();
于 2012-11-16T17:30:37.960 に答える
0

リフレクションの使用:

final Field field = Date.class.getDeclaredField("monthAndDate");
field.setAccessible(true);

final String monthAndDate = (String)field.get(date);

(と

Date date = new Date("anything");

)

于 2012-11-16T17:52:27.923 に答える
0

リフレクションを使用することもできますが、ゲッター メソッドを提供する方がより良い解決策になります。

于 2012-11-16T17:32:12.757 に答える