0

これをどのように表現するか正確にはわかりません。あいまいなタイトルで申し訳ありません。とにかく、これは基本的に私の言い訳です。

基本的に、コンストラクターや関数などを使用してクラスに値を渡す方法を知っています。

class bob {
    int value;
    public bob(int x) {
        value = x;
    }
}

bob test = bob(5);

しかし、オペレーターなどをどのように処理しますか? 同様に、人がクラスを一緒に追加した場合:

bob test1 = bob(5), test2 = bob(3), test3 = test1 + test2;

人がインスタンス化された 2 つのオブジェクトを一緒に追加しようとしたときに、実際に何かを実行させるにはどうすればよいでしょうか?

または、次のようなことを言った場合、

bob test = 5;

初期化した値で何かを行うにはどうすればよいですか?

4

3 に答える 3

2

You can't do either in Java. Java's operators only work for primitive types (and String as a special exception), and regular objects can only be initialized with compatible objects or null.

Instead, you should define appropriate methods and constructors:

public bob add(bob other) { ... }

then use

bob test1 = new bob(5);
bob test2 = new bob(3);
bob test3 = test1.add(test2);

Since you can't do bob test = 5;, just do bob test = new bob(5);.

于 2012-10-07T02:57:12.543 に答える
0

あなたのクラス宣言は正しいです。(まったく関係のないことですが、慣例により、Java クラスは大文字で始める必要があります。つまり、クラスは Bob という名前にする必要があります。しかし、それは問題とは関係ありません...)

オブジェクトを作成し、パラメーターをコンストラクターに渡すための適切な構文は次のとおりです。

Bob test = new Bob(5);

追加に関しては、オペレーターと直接作業することはできません。オブジェクトに対する演算子の動作を指定できる言語はありますが、Java はその 1 つではありません。(これに関する詳細については、演算子のオーバーロードについて Google で調べることができます。)

加算タイプのものが必要な場合は、実際にはそのための関数を定義する必要があります。あなたの場合、できることは2つあります。

インスタンス関数を定義できます。

class Bob {
// The other stuff you listed, like the constructor and the private field
    public Bob add(Bob other) {
        return new Bob(value + (other == null ? 0 : other.value));
    }
}

または、静的関数を定義できます。

class Bob {
// The other stuff you listed, like the constructor and the private field
    public static Bob add(Bob one, Bob other) {
        return new Bob((one == null ? 0 : one.value) + (other == null ? 0 : other.value));
    }
}

最初のものは、あなたが呼び出す

test3 = test1.add(test2);

2 つ目は、次のように呼び出します。

test3 = Bob.add(test1, test2);
于 2012-10-07T03:05:29.043 に答える
0

Java は C++ ではありません。キーワードなしでコンストラクターを呼び出すことはできませんnew(リフレクションを使用しない限り、それはまったく別のトピックです)。+また、カスタム オブジェクト タイプを 操作するのが好きなオペレータをオーバーライドすることもできません。

代わりに、オブジェクト タイプの 1 つのインスタンスを別のインスタンスに追加することが意味的に適切である場合は、次のadd()ようにメソッドを定義して行います。

class Bob {
    int value;
    public Bob(int x) {
        value = x;
    }

    public Bob add(Bob other) {
        return new Bob(this.value + (other == null ? 0 : other.value));
    }
}

その後:

Bob test1 = new Bob(5);
Bob test2 = new Bob(3);
Bob test3 = test1.add(test2);
于 2012-10-07T02:59:51.137 に答える