2017-01-28 2 views
-3

암시 적 변환이 아니라 변수 유형이 일치하지 않을 때 Java 컴파일러가 오류를 발생하도록하는 방법이 있습니까? 예를 들면 : 암시 적으로 변환됩니다 자바 위의 예에서Java 컴파일러가 명시 적 유형 변환을 수행하는 방법

int intValue=3; 
double dblValue = 2.2; 
double result; 
result = 1/intValue*(intValue-dblValue); 

(1 /있는 intValue) 값으로 정수를 0으로

내가 원하는 것은 오류 변수 유형 돈을 발행하는 컴파일러입니다 암시 적으로 변환하는 것이 아니라 일치시킵니다. 미리

EDIT1에

감사 : 위의 방정식은 단순한 예이다. 나는 아래의 솔루션 중 하나를 사용하여이 문제를 해결하는 방법을 알고 :

result = 1.0/intValue*(intValue-dblValue); 

또는

result = 1/(double)intValue*((double)intValue-dblValue); 

하지만 난 후 무엇을하지 이잖아. 감사합니다

편집 2 : 나는 타입 변환이 아닌 타입 변환을 언급하고있었습니다. 명시 적 형식 변환을 적용하기 위해 컴파일러를 찾고 있습니다.

나는 이런 식으로 뭔가를 찾고 있어요 : https://support.microsoft.com/en-us/help/311329/option-explicit-and-option-strict-in-visual-basic-.net-and-in-visual-basic

+1

이것은 완벽한 Java 코드이므로이 경우 오류가 발생하지 않아도됩니다. –

+5

"암시 적으로 값 0 인 정수에 캐스트 (1/intValue)를 입력합니다."- 무엇? 거기에 관련된 주조품이 없습니다. 그것은 double을 생성하지 않고 int 나 그와 같은 것으로 변환합니다. 나누기 연산자는 int를 직접 생성합니다. – user2357112

+0

아니요. Java 규칙이 이미 정의되어 있으며 언급 한 구문이 오류가 아닙니다. 그것은 심지어 형식 변환이 아닙니다. int와 double을 포함하는 경우 암시적인 변환이며 int 만 포함하는 경우에는 암시 적 변환이 아닙니다. 네가 묻고있는 것이 불분명하다. – EJP

답변

1

방법이 아니라 두 개의 정수를 나누는 것보다, 당신은 정수 이중와 분할에 대해?

result = 1.0/intValue*(intValue-dblValue); 
+0

네, 그걸 압니다.하지만 제가 묻는 것은 아닙니다. – CPSProgrammer

+0

하지만 당신이 묻는 것에 대한 대답입니다. –

0

"암시 적 typecasting 대신 변수 유형이 일치하지 않을 때 Java 컴파일러에서 오류를 발생시키는 방법이 있습니까?" 유형이 일치하지 않거나 정보가 손실되면 오류가 발생합니다. 위의 설명에서 지적했듯이, 귀하의 경우에는 "유형 변환"이 없거나 구체적으로 한정된 변환이 없습니다. 컴파일러는 정확히 무엇을 해야하는지, 아니, 당신은 그것을 바꿀 수 없습니다.

"내가 원하는 것은 컴파일러가 ..."슬프게도, 원하는 것은 컴파일러가 고려하지 않는 것입니다. Java 언어 사양 및 호환성 요구 사항에 따라 Java 언어 준수를 위해 지정된 내용 만 수행합니다.

귀하의 경우 완벽하게 합법적 인 int 연산을 지정 했으므로 컴파일러가 원하는 것을 고려해도 아무런 불만이 없습니다.

Findbugs 및 CheckStyle과 같은 보풀 도구를 사용하여 모든 종류의 버그 위험 (사용자 정의 규칙 포함)에 대한 소스를 사전 처리 할 수 ​​있습니다. 실수로 혼합 유형 표현에서 연관성이나 유형 위험을 무시한 프로그래머의 유스 케이스를 감지 할 수 있습니다. 그들은 훌륭한 도구입니다. 한번 봐봐.

+0

@ GrzegorzGórkiewicz 의견을 게시 한 후에 해당 게시물을 업데이트했습니다. – CPSProgrammer