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;
}