2017-01-28 3 views
-3

暗黙の変換ではなく、変数型が一致しない場合にJavaコンパイラにエラーを発行させる方法があります。たとえば、次のように暗黙的に変換される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); 

が、私は後だものではないthatsの:私は以下のソリューションのいずれかを使用してこの問題を解決する方法を知っています。ありがとう

Edit2:私は型変換ではなく型変換を指していました。私は明示的な型変換を強制するコンパイラを探しています。

私はこのような何かを探しています: 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

ではなく2つの整数を分割するよりも、約、あなたは二重の整数を分割する方法は?

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

はい私はそれを知っていますが、それは私が求めているものではありません – CPSProgrammer

+0

それはあなたが求めているものに対する答えです。 –

0

「というよりも、暗黙の型キャスト、変数の型が一致しないときにエラーを発行するJavaコンパイラを強制する方法があります。」タイプが一致しないか、情報が失われると、エラーが発生します。上記のコメントで指摘したように、あなたの例では、「型変換」や変換を絞り込むことはできません。コンパイラは、それが想定していたものを正確に行っています。いいえ、あなたはそれを変更することはできません。

「コンパイラが望むのは...」悲しいことに、欲しいものはコンパイラによって考慮されません。これは、Java言語仕様と互換性要件によってJava言語に準拠するために指定されたものだけを行います。

あなたのケースでは、完全に有効なint操作を指定しました。コンパイラが必要なものを気にしていたとしても、不平を言うことはありません。

FindbugsやCheckStyleなどのlintツールを使用して、あらゆる種類のバグのリスク、カスタムルールのソースを前処理することができます。混合型の式の中で、誤って連合性や型のリスクを無視したプログラマーのユースケースを検出する可能性があります。彼らは優れたツールです。それらをチェックしてください。

+0

@GrzegorzGórkiewicz私はコメント後に投稿を更新した – CPSProgrammer

関連する問題