我想创建一个方法,它接受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;
}
答案 0 :(得分:4)
是的,有可能实现它。事实上,你是在第二段代码中完成的。
Java没有运算符重载或隐式转换(超出数值转换和“扩展”类型转换)。因此,无法允许entry * sign
之类的语法(除了您使用的语法之外)。
你是什么意思解决方法?这不是问题。这是一种语言设计决策。你已经成功地找到了合适的Java习语。
答案 1 :(得分:0)
为什么不使用sign
if (entry * sign.value > 0)
enum Sign
public final int value;
答案 2 :(得分:0)
我认为对于这种情况,使用最终的静态变量会更好。
public final class Sign {
public final static int POSITIVE = 1;
public final static int NEGATIVE = -1;
private Sign() {
}
}
然后,您可以使用Sign.POSITIVE
和Sign.NEGATIVE
进行所需的操作。