私は、この値を設定した範囲に保つために処理したいint型の単一の値を持つカスタムオブジェクトを持っています。私の質問はこれです:次のクラスが与えられたら、myObject = 0で値を設定できますか?Javaで '='演算子を使用してカスタムクラスオブジェクトの値を設定する
代わりにメソッドpublicボイドsetBarを作成するpublic class foo{
private int bar;
public foo(){
}
}
()
私は、この値を設定した範囲に保つために処理したいint型の単一の値を持つカスタムオブジェクトを持っています。私の質問はこれです:次のクラスが与えられたら、myObject = 0で値を設定できますか?Javaで '='演算子を使用してカスタムクラスオブジェクトの値を設定する
代わりにメソッドpublicボイドsetBarを作成するpublic class foo{
private int bar;
public foo(){
}
}
()
ありません、あなたはそれを行うことはできません。 Javaは演算子のオーバーロードをサポートしていません。 +
演算子は文字列連結を実行するためにオーバーロードされますが、これは唯一の例外です。 =
演算子を使用するもう1つの例は、ラッパークラスの場合です。プリミティブ型の値をラッパータイプに直接割り当てることができます。これにより、プリミティブ値がラッパータイプに自動ボックス化されます。
Integer val = 10; // 10 is auto-boxed to Integer reference
しかし、それはその目的にのみ限定されています。独自のユーザー定義型では、この操作を行うことはできません。
メソッドの作成が唯一の選択肢です。
あなたが意味する場合:
foo x = new foo();
x = 10; // This is meant to set x.bar
そして、いや、あなたはJavaでそれを行うことはできません。あなたも私に尋ねると良いことです...可読性の面では恐ろしいでしょう。
あなたもができるようにそれを変更することはできません。と同等として
foo x = 10;
:
foo x = new foo();
x.bar = 10; // Or x.setBar(10);
行列を使って作業するのはいいと思うが、明らかにこの例ではない。 – sdasdadas
barのアクセス修飾子は公開されていないので、x.barを設定したい場合にも変更する必要があります。 –
@ShivaKumar:私はそのように仮定していました。コードは同じクラスから呼び出すことができますが、もちろん:) –
をいいえ、それはカプセル化ロジック、およびJavaそのものに反します。ここで
Foo myObject = new Foo();
、myObject
は、参照を保持しています。オブジェクト参照に0などのプリミティブ値を代入することはできません。
代わりに、あなたはJavaではmyObject.setBar(10);
を行う必要があり、大会は、オブジェクトの内部の属性を変更するにはセッターとゲッターを提供することです。あなたのケースのために:
foo instance = new foo();
instance.setBar(10); //Sets bar to 10
instance.getBar(); //returns bar's current value (right now 10)
セッターは、新しい値を受け取り、それを設定します。
public void setBar(int newBar) {
bar = newBar;
}
とゲッターは、フィールドの現在の値にアクセスすることができます:
public int getBar() {
return bar;
}
あなたがすることはできません、しかし、少なくとも、Javaの場合はと同じように=
演算子をオーバーロードします。たとえば、Integer
やFloat
ラッパークラスについて考えているなら、そこにはJavaの実装そのものに関連するもう1つの力があり、後でボクシングとという概念で派生します。。
おそらく、このフィールドを公開することができます。ビジネスメソッドで必要な検証を行うだけで済みます(セット中は不要です)。
これは私が考えていたものですが、私の質問は、コンストラクタ内部で何らかのリスナーを公開フィールドに置くことができるため、手動で何かを呼び出さなくてもすぐに処理を行うことができます。 process()メソッド? – Xandor
いいえ、できません。 –