我想创建一个接受枚举
并直接在计算中使用它的方法
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;
}
最佳答案
是的,这是有可能实现的。事实上,您在第二段代码中做到了。
Java 没有运算符重载或隐式转换(除了数字转换和“扩大”类型转换)。因此,没有办法允许像 entry * sign
这样的语法(除了你使用的那个)。
变通办法是什么意思?这不是问题。这是一个语言设计决定。而且您已经成功地掌握了适当的 Java 习语。
关于java - 有没有办法在java中实现隐式类型转换或转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18338097/