为什么 Eclipse 报告从 float 到 double 的转换错误
Why eclipse reports casting error from float to double
有谁知道为什么 eclipse 在这种情况下会报告 double 到 float 的转换错误?
奇怪的是,即使我禁用该功能以删除不必要的转换,它仍然被删除并报告为错误。这不是很傻吗?
我是运行这个版本的eclipse:
版本:Mars.2 发布 (4.5.2)
构建 ID:20160218-0600
您将装箱与泛型混合在一起,这是 Eclipse 编译器和 Javac 之间的不同之处。在您的特定情况下,这可能已在 Neon 中修复。至少,它在 Oxygen.1 中有效。
考虑以下可在 Eclipse 和 Javac 中运行的代码:
Float f = Float.valueOf("1.0");
System.out.println("f: " + f);
double val = f;
System.out.println("val: " + val);
但在您的情况下,您使用的是 Collection<T>
:
Collection<Float> f = Collections.singleton(Float.valueOf("1.0"));
System.out.println("f: " + f);
double val = Collections.min(f); // ECJ thinks Object!
System.out.println("val: " + val);
这里泛型的使用是关键部分,从经验上看,这是Eclipse和Javac最大的区别。我不能告诉你具体的,但在那种情况下,Eclipse 只是忽略了集合的 T
是原始包装器这一事实,并且不进行拆箱,而是因转换错误而失败。
TL;DR: 使用 Eclipse Oxygen.1 :)
如果实在不行,请使用doubleValue()
,如:
double val = Collections.min(f).doubleValue();
并确保集合不为空且不包含 null
s.
有谁知道为什么 eclipse 在这种情况下会报告 double 到 float 的转换错误?
奇怪的是,即使我禁用该功能以删除不必要的转换,它仍然被删除并报告为错误。这不是很傻吗?
我是运行这个版本的eclipse: 版本:Mars.2 发布 (4.5.2) 构建 ID:20160218-0600
您将装箱与泛型混合在一起,这是 Eclipse 编译器和 Javac 之间的不同之处。在您的特定情况下,这可能已在 Neon 中修复。至少,它在 Oxygen.1 中有效。
考虑以下可在 Eclipse 和 Javac 中运行的代码:
Float f = Float.valueOf("1.0");
System.out.println("f: " + f);
double val = f;
System.out.println("val: " + val);
但在您的情况下,您使用的是 Collection<T>
:
Collection<Float> f = Collections.singleton(Float.valueOf("1.0"));
System.out.println("f: " + f);
double val = Collections.min(f); // ECJ thinks Object!
System.out.println("val: " + val);
这里泛型的使用是关键部分,从经验上看,这是Eclipse和Javac最大的区别。我不能告诉你具体的,但在那种情况下,Eclipse 只是忽略了集合的 T
是原始包装器这一事实,并且不进行拆箱,而是因转换错误而失败。
TL;DR: 使用 Eclipse Oxygen.1 :)
如果实在不行,请使用doubleValue()
,如:
double val = Collections.min(f).doubleValue();
并确保集合不为空且不包含 null
s.