有没有办法在java中实现隐式类型转换或转换

时间:2013-08-20 14:47:14

标签: java casting type-conversion implicit-conversion

我想创建一个方法,它接受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;
  }

3 个答案:

答案 0 :(得分:4)

是的,有可能实现它。事实上,你是在第二段代码中完成的。

Java没有运算符重载或隐式转换(超出数值转换和“扩展”类型转换)。因此,无法允许entry * sign之类的语法(除了您使用的语法之外)。

你是什么意思解决方法?这不是问题。这是一种语言设计决策。你已经成功地找到了合适的Java习语。

答案 1 :(得分:0)

为什么不使用sign

的int值
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.POSITIVESign.NEGATIVE进行所需的操作。