2017-10-04 160 views
0

有沒有人知道爲什麼eclipse在這種情況下報告一個double來拋出float錯誤?爲什麼eclipse報告將float錯誤從float轉換爲double

奇怪的是,即使我禁用該功能以刪除不必要的投射,它仍會被移除並報告爲錯誤。這不是很愚蠢嗎?

enter image description here

我運行此版本的Eclipse: 版本:Mars.2版本(4.5.2) 版本ID:20160218-0600

enter image description here

+0

我無法用Eclipse Oxygen.1重現此錯誤。這似乎是[更新](https://stackoverflow.com/a/46273081/6505250)將解決的已經修復的錯誤。 – howlger

+0

無法用霓虹燈再現。 – shmosel

+0

我確實有一個運行氧氣的版本,沒有這個問題。聽起來像我應該更新我的火星安裝到氧氣。欣賞反饋! – simgineer

回答

1

你混合拳擊泛型和Eclipse編譯器和Javac之間的差異。在你的具體情況下,這可能是在霓虹燈固定的。至少,它適用於氧氣。

考慮下面的代碼,它工作在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。