[解決済み】「error: '.class' expected」の意味と修正方法について
質問事項
時々、新規ユーザーが以下のような分かりにくいコンパイルエラーに遭遇することがあります。
'.class' expected
:
double d = 1.9;
int i = int d; // error here
^
error: '.class' expected
Java IDE コンパイラの中には、これを少し違った形で表現するものがあります。
error: insert ". class" to complete Expression
次のようなエラーはどうなるのでしょうか? 実際の意味は また、その原因は何なのか、どのように修正すればよいのでしょうか?
どのように解決するのか?
まず、これはコンパイルエラーです。 もし、このメッセージが 実行時間 コンパイルエラーがあるコードを実行している可能性があります。
以下に、エラーの例をいくつか示します。
double d = 1.9;
int i = int d; // error here
^
int j = someFunction(int[] a); // error here
^
どちらの場合も、コンパイラのエラーメッセージは
error: '.class' expected
.
エラーメッセージの意味と原因について教えてください。
コンパイラは、シンタックスチェックの際に、(率直に言って)無意味なコードによってかなり混乱しています。 コンパイラは、ある型(たとえば
int
または
int[]
) を、実際に式を期待しているコンテキストで使用することができます。 つまり、この時点で構文的に許容できる記号は
.
に続いて
class
.
以下は、この構文が正しい場合の例です。
Class<?> clazz = int; // incorrect
Class<?> clazz = int.class; // correct!
注:常に 可能 を把握することです。 何故 コンパイラのシンタックスチェッカーが、この型は式であるべきだと考えているからです。 しかし、多くの場合、これを「コンパイラが混乱している」とだけ考えて、混乱の原因となった(避けられない!)構文エラーを探す方が簡単です。 その構文エラーは、初心者にはわからないかもしれませんが、これが根本的な原因であることを知ることは、良いスタートとなります。
どうやって直すの?
残念ながら、quot;quot; の提案で
.class
は、ほとんどの場合正しくありません。 この回答の最初にある2つの例では、確かに役に立ちませんね。
実際の修正は、あなたがそこに型を置くことで何を達成しようとしたのかによります。
-
を書くつもりだったのなら タイプキャスト のように、型を丸括弧で囲む必要があります。
double d = 1.9; int i = (int) d; // Correct: casts `1.9` to an integer
-
単に値を代入したり、パラメータをそのまま渡すつもりだったのであれば、型は削除すべきです。
int j = someFunction(a); // Correct ... assuming that the type of // 'a' is suitable for that call.
の型を指定する必要があります。 形式パラメータ メソッドを宣言するとき。 しかし、通常、メソッドに指定する必要はありません。 実引数 . まれに(オーバーロードのあいまいさを解消するために)必要な場合は、型キャストを使用します。
その他の例
someMethod(array[]);
でエラーが報告されます。
array[]
というのも、これは式ではなく型だからです。 訂正はおそらくどちらかでしょう。
someMethod(array); // pass ref to the entire array
または
someMethod(array[someExpression]); // pass a single array element
int i = someMethod(int j);
プログラマは、パラメータ宣言をメソッド コール . ここでは、宣言ではなく、式が必要です。
int i = someMethod(j);
int i = int(2.0);
プログラマーはタイプキャストを行おうとしていたのです。 このように書くべきでしょう。
int i = (int) 2.0;
int[]; letterCount = new int[26];
プログラマーは、偽のセミコロンを追加しています。 本来はこのように書くべきでしょう。
int[] letterCount = new int[26];
if (someArray[] > 80) {
// ...
}
は
someArray[]
は式ではなく型を表します。 プログラマーはおそらく次のようなことを意味しているのだろう。
someArray[someIndex] > 80
または
someArray.length > 80
.
int[] integers = new int[arraySize];
...
return integers[];
は
integers[]
は型宣言子を表しますが、式が必要です。 式は以下のいずれかでなければならない。
return integers; // Return the entire array
または
return integers[someIndex]; // Return one element of the array
if ((withdraw % 5 == 0) && (acnt_balc >= withdraw + 0.50))
double cur = acnt_balc - (withdraw + 0.50);
System.out.println(cur);
else
System.out.println(acnt_balc);
ここでの間違いは、"then"文の周りに中括弧があることです。
if ((withdraw % 5 == 0) && (acnt_balc >= withdraw + 0.50)) {
double cur = acnt_balc - (withdraw + 0.50);
System.out.println(cur);
} else {
System.out.println(acnt_balc);
}
しかし、コンパイラが混乱しているのは、"if" の "then" 節が変数宣言ではありえないということです。 そこでパーサーは、メソッド呼び出しとなりうる式を探すことになる。 たとえば、次のようにすると、局所的に構文的に有効になります。
if ((withdraw % 5 == 0) && (acnt_balc >= withdraw + 0.50))
double.class.newInstance(); // no compilation error here
...やろうとしていることは無意味なことではありますが。 そしてもちろん、コンパイラはこのダングリングな
else
.
関連
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] java.lang.UnsupportedClassVersionError を修正する方法。サポートされていないメジャー.マイナーバージョン
-
[解決済み] シンクロナイズド」とはどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み] hibernateでResultSetを抽出できない。
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み】文字列中の � を置換する方法
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み] StringBuilderをクリアまたは空にするにはどうすればよいですか?重複] [重複] [重複] [重複] [重複] [重複
-
[解決済み] java.sql.SQLException を取得しました。ResultSet が終了した後の操作は許可されません。
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】Java: GZIPInputStreamの作成に失敗しました。GZIP形式ではありません