問題タブ [unchecked]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 例外処理のグッド プラクティス
Java での例外処理に関していくつか質問があります。私はそれについて少し読んで、いくつかの矛盾するガイドラインを得ました。
言及された記事を見てみましょう:
「クライアントコードが何もできない」場合、一般的にチェック例外の使用を避けるべきであると述べています。しかし、それは正確にはどういう意味ですか?GUI にエラー メッセージを表示することは、チェックされた例外を発生させる十分な理由ですか? しかし、GUI プログラマーは、潜在的なエラー情報を表示するために、RuntimeExceptions とその子孫をキャッチすることを覚えておく必要があります。
この記事で提示された 2 番目の見解は、いくつかのカスタム フィールド/メソッドを実装する場合を除き、独自の例外クラスを発明することを回避する必要があるというものです。私は一般的にこれに同意しません。今日の私の実践は正反対でした。新しいメソッドを追加せずに Exception を拡張するだけであっても、作成したクラスによって実現される目標を反映するために、独自の例外構造に例外をラップしました。スローされたときに上位層でそれらをより柔軟に処理するのに役立つと思います。また、これらのクラスを使用するプログラマーにとって、一般的により明確で理解しやすいと思います。
私は今日、いくつかのコードを「新しい方法」で実装し、記事で提示されているように、あちこちで RuntimeException をスローしてから、Sonarに分析させました。さらに混乱させるために、Sonar は私の RuntimeExceptions をメジャー エラーとしてマークし、「ルート タイプの例外をスローしないようにして、独自のタイプでラップしてください」のようなメッセージを表示しました。
かなり物議を醸しているように見えますが、どう思いますか?
また、今日の技術リーダーの 1 人から、「JVM にとって非常にコストのかかる操作であるため、例外をラップするだけでは良くない」と聞いたことがあります。私にとっては、どこでも SQLExceptions または IOExceptions をスローすることは、カプセル化を少し破るように見えます..
では、私がここで提示した質問に対するあなたの一般的な態度はどうですか?
独自の型で例外をラップするのはいつですか?これを行うべきではないのはいつですか?
「クライアントはこれについて何もできない、実行時例外をスローする」というポイントはどこにありますか? '
パフォーマンスの問題はどうですか?
java - TreeMap ジェネリック引数の警告
2 行目で次のエラーが発生します。
型の安全性: TreeMap 型の式は、Map に準拠するために未チェックの変換が必要です
私が見つけた解決策は次のとおりです。「リスト型の式のチェックされていない変換が必要です...」を修正するにはどうすればよいですか?
しかし、単純に安全です@SuppressWarnings("unchecked")
か、それとも私のコードが失敗するシナリオがありますか? より一般的には、いつ安全に ? を追加でき@SuppressWarnings("unchecked")
ますか?
forms - チェックされていないチェックボックスが投稿される
チェックボックスのあるフォームがあります:
チェックボックスをオフにすると、 http://www.w3schools.com/jsref/prop_checkbox_value.aspに従っていないはずなのに、チェックボックスが投稿されます
java - ジェネリックとクラス変換
私は古いコードを生成しようとしていInteger.class
ますInteger.TYPE
..入力クラス)。これは変換の候補のようです (まだどこかに存在しない場合)。だから、私はこのようなものを持っています:
このコードの問題は、コンパイラ自体が if ブロックで を確認したことをT == Integer
認識していないことInteger.TYPE
です。もちろん、いつでも明示的にキャストできClass<T>
ます。問題は、このキャストは安全であり、@SuppressWarnings("unchecked")
注釈を追加しても問題ないかどうかです。
android - リセット後、以前に選択したラジオボタンを選択できません
それぞれが3つのRadioButtonで構成される3つのRadioGroupのセットがあります。また、すべてのグループのすべてのラジオボタンをfalseに設定するリセットボタン(setChecked(false))。
リセットは正常に機能します(すべてのラジオボタンがオフになっています)。ただし、リセット後、各RadioGroupで、リセットボタンがクリックされた時点でチェックされていない2つのボタンのみをチェックできます。その後、グループ内の3つのボタンすべてを以前と同じように再度チェックできます。
リセット中にsetFocusable(true)とsetClickable(true)を追加しようとしましたが、違いはありません。それでは、他に何がフォーカスまたはクリック可能性によってこれを引き起こし、どのように解決するのでしょうか?
AndroidAPI7をターゲットにしています。
完全なMainActivity.javaは次のとおりです。
java - パラメーターを使用した汎用 Java 関数の呼び出し
どういうわけか次のことが可能ですか?
...
明らかに、これはタイプ セーフではありません。Foo<?>
この場合、実際にはFoo<String>
.
しかし、通常の「チェックされていない」警告ではなく、実際には次のエラーが表示されます: The method bar(capture#1-of ?) in the type Foo is not applied for the arguments (String)
通常、この例外を必要な警告に変えるためにできるキャストがいくつかありますが、どういうわけか今は見つかりません...
何か考えはありますか ( 「これをしないでください!」以外にお願いします)?
編集:
誰もが「これをしないでください」について話し合いたいと思っているようです。それで、私が解決しようとしている問題全体をできるだけエレガントに説明させてください。
イベントごとに 10 億のインターフェイス タイプを宣言する必要のない柔軟なイベントバス システムを作成しようとしています。
EventBus
次のようなクラスが必要です。
インターフェイスEventHandler
は次のようになります。
そうすれば、次のようにイベント ハンドラーを簡単に記述できます。
ここでGroups
、 およびEvents
は、可能なイベント タイプを記述する列挙型です。
次に、それらを登録します
そして、私はそれらを呼び出すことができます
私のコードでは、グループ内のすべてのソースが型であり、作成するすべてのハンドラーで自分の人生を型キャストしたくないことを知っています。そのため、ハンドラーに特定のインターフェイスを実装できるようにしたいのですが、次のようにすべてのハンドラーを記述するのではなく、EventBus からの安全でない型キャスト (一度書いて永遠に隠します) で呼び出します。EDIT_BOXES
TextBox
また、キャストが間違っていると、プログラムはクラッシュしていずれかの方法で書き込みます。ハンドラーに「instanceof」チェックを入れても、何らかの方法でそれをエラーとしてスローする必要があります。私はそれをエレガントに行うことができますが、実際には問題ではありません。このシナリオのエラーは、修正する必要があるコードのバグであり、ユーザーに適切に通知する必要がある実行時のユーザー エラーではないためです。
さて、私は他のライブラリが完全にタイプセーフなイベント システムを実装しているのを見てきましたが、これには多くの場合、可能なすべてのタイプのイベントとすべての可能なタイプのイベント ハンドラー、場合によってはイベントバス自体の関数に対してもインターフェイスを宣言する必要があります。あなたが私に尋ねると、それは価値があるよりもはるかに苦痛です.
私が達成しようとしていることを実行するための明確な方法を持っている人がいるなら、私はうれしく思います. しかし、それが他の方法で実行可能かどうかはわかりません。
java - Java ジェネリック SuppressWarnings("uncheck") 謎
コードの代替(1) が警告なしでコンパイルされ、コードの代替(2) が「チェックされていないキャスト」警告を生成するのはなぜですか?
両方に共通:
代替案 (1):
代替案 (2):
代替案 (2) は以下を生成します。
これは:
java - 奇妙な未チェックの変換警告
私は自分のコードで戦略パターンを使用しました。ここに短い断片があります:
他のどこかで私は:
そしてコンパイラシグナル:
奇妙なことに、これを行うと、警告は表示されません。
これを修正するにはどうすればよいですか? 多くの変更を試みましたが、それでも警告が表示されます。助けてください!
java - チェックされていない例外を含む Java アプリケーションの実装
重複の可能性:
Java のチェックされていない/チェックされた例外の明確化
Java でのチェック例外と非チェック例外の議論について読んでいます。違いは知っていますが、どちらを選択するかは完全にはわかりません。本当に選択肢はありますか?チェック例外の可能性がある場合に備えて、java は try catch の使用を強制しません。非チェック例外のみを使用してアプリケーションを実装する方法、そのようなアプリケーションでチェック例外が発生する可能性がある状況にどのように対処するか。チェックされた例外をチェックされていない例外に変換する方法に関するコードサンプルを使用して、これを解決してくれる親切な人がいれば、それは素晴らしいことです:)
intellij-idea - IntelliJは「警告:java:foo / bar / Baz.javaはチェックされていない、または安全でない操作を使用します」と述べていますが、どの行を参照しているかについては述べていません。
この警告が表示されます:
画像をクリックすると、関連するエディターが開きますが、警告が表示される行番号は表示されません。@SuppressWarning("unchecked")
クラス全体を追加したくない...
回避策/修正はありますか?