2017-10-04 9 views
0

이 상황에서 이클립스가 부동 소수점 캐스팅 오류를보고하는 이유를 알고 있습니까?왜 이클립스는 float에서 double으로 캐스팅 오류를보고합니까

이상한 점은 불필요한 전송을 제거하기 위해 해당 기능을 사용하지 않도록 설정하더라도 여전히 제거되고 오류로보고됩니다. 이것은 바보가 아닌가? 버전 : Mars.2 출시 (4.5.2) 빌드 ID : 20160218-0600

enter image description here

+0

Eclipse Oxygen.1에서이 오류를 재현 할 수 없습니다. 그것은 [수정] (https://stackoverflow.com/a/46273081/6505250)이 고칠 수있는 이미 수정 된 버그 인 것 같습니다. – howlger

+0

Neon과 함께 재생할 수 없습니다. – shmosel

+0

이 문제가없는 산소를 실행하는 버전이 있습니다. 화성을 산소로 업데이트해야하는 것 같습니다. 피드백을 감사드립니다! – simgineer

답변

1

당신은 혼합되어 권투

enter image description here

나는이 일식의 버전을 실행하고있어 제네릭과 Eclipse 컴파일러와 Javac 간에는 다른 점이있다. 특정 경우에, 이것은 아마도 Neon에서 수정되었을 것입니다. 적어도 Oxygen.1에서 작동합니다.

은 이클립스와 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이 가장 다른 점이 있습니다. 구체적으로 말할 수는 없지만 이클립스는 컬렉션의 T이 기본 래퍼이며 unboxing을하지 않고 대신 캐스트 오류로 인해 실패한다는 사실을 단순히 무시합니다.

TL; DR : 사용 이클립스 Oxygen.1 :

당신이 정말로에서와 같이 doubleValue()을 사용할 수없는 경우 :

double val = Collections.min(f).doubleValue(); 

그리고 컬렉션이 비어 있지 않도록 null 초를 포함하지 않습니다.