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

标签 java casting type-conversion implicit-conversion

我想创建一个接受枚举并直接在计算中使用它的方法

  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/

相关文章:

c++ - 在模板函数中将 Chars 转换为 Int

c - 尝试执行 1 -(双数)的非法指令

javascript - 想要同时使用 and 运算符

java - 错误的类型转换

java - 整数除法 : How do you produce a double?

在c中将字符串转换为 double

java - Apache Derby 插入速度很慢

Java 不会响应我的输入

java - Java 中的序列化概念与组合

java - 按下按钮后检查文本框中的文本是否与字符串匹配