1

enumを受け取り、それを計算で直接使用するメソッドを作成したかった

  private static int getEntries(List<Integer> vector, Sign sign)
  {
    //assert isPrimitiveTypeCompliant(vector) : "Vector has null components!";
    int entries = 0;

    for (Integer entry : vector)
      if (entry * sign > 0) // does not compile
        entries++;

    return entries;
  }

と思いました。System.out.println(Object)暗黙の型変換も行うと仮定したので、それは可能でした。そうではありませんが、次のアプローチを使用します。

 public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }
    }

 public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
    }

質問

Javaでこれを達成することは可能ですか?それとも、これC++は演算子のオーバーロードに予約されていますか? 一般的な回避策は何ですか? 仕事をするユーティリティ/アダプタクラス?


ところで、私は最終的にこのアプローチになりました

  private enum Sign
  {
    POSITIVE(+1), NEGATIVE(-1);

    private int sign;

    private Sign(int sign)
    {
      this.sign = sign;
    }

    public int process(int n)
    {
      if (n * sign > 0)
      {
        return n;
      }
      return 0;
    }
  }

  private static int getEntries(List<Integer> vector, Sign sign)
  {
    //assert isPrimitiveTypeCompliant(vector) : "Vector has null components";
    int entries = 0;

    for (Integer entry : vector)
      entries += sign.process(entry);

    return entries;
  }
4

3 に答える 3

0

のint値を使用しないのはなぜですかsign

if (entry * sign.value > 0)



enum Sign

    public final int value;
于 2013-08-20T14:53:51.973 に答える
0

この場合、最終的な静的変数を使用する方がうまくいくと思います。

public final class Sign {
    public final static int POSITIVE = 1;
    public final static int NEGATIVE = -1;

    private Sign() {
    }
}

次に、必要な操作にSign.POSITIVEandを使用できSign.NEGATIVEます。

于 2013-08-20T14:57:56.850 に答える