[解決済み] ラムダ式で使用する変数はfinalまたはeffective finalでなければならない
2022-04-15 02:16:27
質問
<ブロッククオートラムダ式で使用する変数はfinalかeffectly finalでなければならない。
を使おうとすると
calTz
というエラーが表示されます。
private TimeZone extractCalendarTimeZoneComponent(Calendar cal, TimeZone calTz) {
try {
cal.getComponents().getComponents("VTIMEZONE").forEach(component -> {
VTimeZone v = (VTimeZone) component;
v.getTimeZoneId();
if (calTz == null) {
calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());
}
});
} catch (Exception e) {
log.warn("Unable to determine ical timezone", e);
}
return null;
}
解決方法は?
A
final
変数は、一度だけインスタンス化できることを意味します。
Javaでは、ラムダや匿名の内部クラスでは、最終的でないローカル変数を再割り当てすることはできません。
古いfor-eachループでコードをリファクタリングすることができます。
private TimeZone extractCalendarTimeZoneComponent(Calendar cal,TimeZone calTz) {
try {
for(Component component : cal.getComponents().getComponents("VTIMEZONE")) {
VTimeZone v = (VTimeZone) component;
v.getTimeZoneId();
if(calTz==null) {
calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());
}
}
} catch (Exception e) {
log.warn("Unable to determine ical timezone", e);
}
return null;
}
このコードの一部に意味が分からなくても
-
を呼び出すと
v.getTimeZoneId();
その戻り値を使用せずに -
代入で
calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());
を変更しない場合、元々渡されたcalTz
で、このメソッドでは使用しません。 -
常に
null
を設定してください。void
を返しますか?
また、これらのヒントがあなたの改善に役立つことを願っています。
関連
-
java.util.NoSuchElementException 原因解析と解決方法
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
[解決済み] ThreadLocal変数はいつ、どのように使用すればよいですか?
-
[解決済み] Java の assert キーワードは何をするのか、そしていつ使うべきなのか?
-
[解決済み] ラムダ式からプロパティ名を取得する
-
[解決済み】C++11のラムダ式って何?
-
[解決済み】finalとeffectly finalの違いについて
-
[解決済み】Lambda式でOrderBy descending?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
スタイルが読み込まれず、ブラウザコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
エラーが報告されました。リソースの読み込みに失敗しました:サーバーは500(内部サーバーエラー)のステータスで応答しました。
-
Javaクラスローダーにソースコードから潜り込む
-
プロジェクトの依存関係を解決できなかった 解決
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 4 at text.Division.main(Divisi
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした