为什么 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();

并确保集合不为空且不包含 nulls.