【问题标题】:Why eclipse reports casting error from float to double为什么eclipse报告从float到double的转换错误
【发布时间】:2017-10-05 06:37:02
【问题描述】:

有谁知道为什么 eclipse 在这种情况下会报告双浮点转换错误?

奇怪的是,即使我禁用该功能以删除不必要的强制转换,它仍然会被删除并报告为错误。这不是很傻吗?

我正在运行这个版本的 Eclipse: 版本:Mars.2 版本 (4.5.2) 内部版本号:20160218-0600

【问题讨论】:

  • 我无法使用 Eclipse Oxygen.1 重现此错误。这似乎是一个已经修复的错误,an update 将修复。
  • Neon 也无法复制。
  • 我确实有一个运行氧气的版本没有这个问题。听起来我应该将我的火星安装更新为氧气。感谢您的反馈!

标签: java eclipse type-conversion eclipse-mars


【解决方案1】:

您将拳击与泛型混合在一起,这是 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    相关资源
    最近更新 更多