1

私は現在、計算の可能なすべての例を持たなければならないプログラムに取り組んでいます。数、差、積、モジュラス、商、和のクラスを作りました。私はこのようなことをしています

Difference(Number first_number,Number second_number){
    s1 = first_number + second_number;
}
Difference(Number first_number, Product first_difference){
    s1 = first_number + first_difference
}
Difference(Product first_difference, Number first_number){
    s1 = first_product + first_number;
}
Difference(Product first_difference, Product second_difference){
    s1 = first_difference + second_difference;
}
Difference(Number first_number, Quotient first_difference){
    s1 = first_number + first_difference;
}
Difference(Quotient first_difference, Number first_number){
    s1 = first_difference + first_number;
}
Difference(Quotient first_difference, Quotient second_difference){
    s1 = first_difference + second_difference;
}
Difference(Number first_number, Difference first_difference){
    s1 = first_number + first_difference;
}
Difference(Difference first_difference, Number first_number){
    s1 = first_number + first_difference;
}
Difference(Difference first_difference, Difference second_difference){
    s1 = first_difference + second_difference;
}
Difference(Number first_number, Sum first_Difference){
    s1 = first_number + first_Difference;
}
Difference(Sum first_Difference, Number first_number){
    s1 = first_Difference + first_number;
}
Difference(Sum first_Difference, Sum second_Difference){
    s1 = first_Difference + second_Difference;
}
Difference(Number first_number, Modulus first_modulus ){
    s1 = first_number + first_modulus;
}
Difference(Modulus first_modulus, Number first_number){
    s1 = first_number + first_ modulus;
}
Difference(Modulus first_modulus, Modulus second_modulus){
    s1 = first_modulus + second_modulus;
}
Difference(Sum first_Difference, Product first_difference){
    s1 = first_Difference + first_difference;
}
Difference(Product first_difference, Sum first_Difference){
    s1 = first_difference + first_Difference;
}
Difference(Sum first_Difference, Quotient first_difference){
    s1 = first_Difference + first_difference;
}
Difference(Quotient first_difference, Sum first_Difference){
    s1 = first_difference + first_Difference;
}
Difference(Sum first_Difference, Difference first_difference){
    s1 = first_Difference + first_difference;
}
Difference(Difference first_difference, Sum first_Difference){
    s1 = first_Difference + first_difference;
}
Difference(Sum first_Difference, Modulus first_modulus ){
    s1 = first_Difference + first_modulus;
}
Difference(Modulus first_modulus, Sum first_Difference){
    s1 = first_Difference + first_modulus;
}
Difference(Difference first_difference, Quotient first_difference){
    s1 = first_difference + first_difference;
}
Difference(Quotient first_difference, Difference first_difference){
    s1 = first_difference + first_difference;
}
Difference(Product first_difference, Quotient first_difference){
    s1 = first_difference + first_difference;
}
Difference(Quotient first_difference, Product first_difference){
    s1 = first_difference + first_difference;
}
Difference(Quotient first_difference, Modulus first_modulus){
    s1 = first_difference + first_modulus;
}
Difference(Modulus first_modulus, Quotient first_difference){
    s1 = first_difference + first_modulus;
}
Difference(Difference first_difference, Quotient first_difference){
    s1 = first_difference + first_difference;
}
Difference(Quotient first_difference, Difference first_difference){
    s1 = first_difference + first_difference;
}
Difference(Difference first_difference, Modulus first_modulus){
    s1 = first_difference + first_modulus;
}
Difference(Modulus first_modulus, Difference first_difference){
    s1 = first_modulus + first_difference;
}
Difference(Difference first_difference, Modulus first_modulus){
    s1 = first_difference + first_modulus;
}
Difference(Modulus first_modulus, Difference first_difference){
    s1 = first_difference + first_modulus;
} 

メインクラスの方法のすべての可能な組み合わせがあることを確認します。これをより効率的にする方法はありますか?これを何度も書くのはうんざりです。

4

4 に答える 4

0

概要として、考えられるアプローチの 1 つを次に示します。

パッケージの練習;

import java.util.function.BiFunction;

public class Operation<T> {
  final T value;

  public Operation(T val) {
    this.value = val;
  }

  public Operation<T> op(T operand, BiFunction<T, T, T> func) {
    final Operation<T> result = new Operation(func.apply(value, operand));
    return result;
  }

  @Override
  public boolean equals(Object other) {
    if (this == other) {
      return true;
    }
    if (! (other instanceof Operation)) {
      return false;
    }
    Operation<T> otherOp = (Operation<T>) other;
    return (value == null ? otherOp.value == null : value.equals(otherOp.value));
  }

  @Override
  public int hashCode() {
    return value == null ? 0 : value.hashCode();
  }

  @Override
  public String toString() {
    return "Operation{ " + value + " }";
  }

  public static void main(String[] args) {
    Operation<Integer> oper1 = new Operation<>(17);
    Operation<Integer> operMinus = oper1.op(23, (x, y) -> x - y);
    Operation<Integer> operPlus = oper1.op(23, (x, y) -> x + y);

    System.out.println("oper1 = " + oper1);
    System.out.println("operMinus = " + operMinus);
    System.out.println("operPlus = " + operPlus);
  }
}

クライアントに引数protected opを提供させる代わりに、メソッドに基づいてロックダウンされた操作を事前定義して、このアプローチのバリエーションをメソッドで使用できます。func

ビジネス ロジックと構造を混同しないことに注意してください。

于 2017-03-21T20:38:23.690 に答える
0

ユーザー定義クラスで演算子を使用する方法がわかりませんが+、問題の解決策は、空のインターフェイスを作成してIExampleから、それをすべてのクラスに実装し、コンストラクターを 1 つ持つことです。

Difference(IExample i1, IExample i2) {
    ...
}
于 2017-03-21T18:53:15.983 に答える