1

このような特定の問題は他に見られなかったので、これを試して検索するのは難しい問題でした. これは、クラスの宿題とは関係のないプログラミングの問題であり、仕様どおりに実装する際に問題が発生しています。

作成したい場合

Function<T>

唯一の抽象メソッドが

Apply<T>(T input1, input2)

次に、AddTwoNumbers クラスのような他の派生関数クラスに拡張します。このクラスには、Apply が T 型の input1 と input2 の合計を返します (実際には、これは Integer または Double である必要があります)。これを実装するにはどうすればよいですか?

私は最初に持っているときに問題に遭遇します

public abstract class Function<T1 extends Number> {
    public abstract T1 apply(T1 input1, T1 input2);
}
public class AddTwoNumbers<T1 extends Number> extends Function<T1> {
    public T1 apply(T1 input1, T1 input2) {
        return input1.intValue() + input2.intValue(); //Error, needs to return type T1, not int or even Integer()
    }
}

Function は型を許可するジェネリックである必要がありますが、実際には、この問題のために AddTwoNumbers が Integers のみを使用することが予想されます。AddTwoNumbers で apply() メソッドを記述できる方法はありますか?

  1. AddTwoNumbers は Function から継承された抽象メソッドを正確に実装します
  2. どういうわけか、2 つの T1 値を加算して、T1 値を適切に返しますか?

T1 を Integer に安全にキャストできず、Apply のオーバーライドも保持できないという事実は、厄介な部分です。

これは私が調べていた問題の一般化です。

4

2 に答える 2

1
public class AddTwoIntegers extends Function< Integer > {
...
}
于 2013-10-04T03:28:53.913 に答える
0

残念ながら、あなたが求めていることは、Java 仕様では不可能です。intsプリミティブとプリミティブの両方doubles、または実際にはプリミティブの組み合わせを説明する抽象レイヤーは存在しないため、このために 2 つのクラスを作成する必要があります。

AddTwoIntegers.javaただし、ファイルとファイルを書き込むよりもはるかに優れた方法がありAddTwoDoubles.javaます。

オプション 1:AdditionFunctionsクラスを作成し、2 つの静的メンバーを指定します: INTSDOUBLES. これは、匿名クラスを使用して簡単に行うことができます。

オプション 2: ビルド プロセスに生成ステップを組み込むことができる場合は、テンプレートを使用します。 Troveはこれを大きな効果をもたらします

于 2013-10-04T03:54:06.253 に答える