gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:30:55 24 4
gpt4 key购买 nike

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

  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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com