[解決済み] チェックドキャストを行うには?
2022-03-14 06:57:04
質問
Genericsの初心者なのですが、問題があります。
次のようなコードを考えてみましょう。
public class A {}
public class B extends A {}
public <T extends A> T getB()
{
A test = new B();
Class<B> clazz = B.class;
if (clazz.isInstance(test))
{
return (T)test;
}
return null;
}
この場合、Unchecked cast の警告が発生します。
return (T)test;
という行があります。
の行で型をチェックしていますが、明らかに
if (clazz.isInstance(test))
という行があります。
チェック済みキャスト("checked cast")を行う方法はありますか?
警告を抑制するだけでなく、実際にチェックしたキャストを実装したいと考えています。 残念ながら、checked castを実行する方法についての情報は見当たりません。
解決方法を教えてください。
<ブロッククオートチェックしたキャストを表示させる方法はありますか?
もちろん、注意しなければならないのは
本当に
を使用するようにハードコードされているので、ここであなたを助けることができます。
B
が数カ所あります。でキャストを実行することができます。
clazz.cast(test)
... しかし、これは
B
ではなく
T
. 具体的には、私が実行したとします。
public class C extends A {}
...
C c = foo.<C>getB();
どのような効果が期待できるのでしょうか?
というようなコードに変更したほうがいいかもしれません。
public <T extends A> T getB(Class<T> clazz)
{
A test = // get A from somewhere
return clazz.isInstance(test) ? clazz.cast(test) : null;
}
それならそれでいいんです、だって
clazz.cast
の型の値を返します。
T
を返すのは問題ない。
関連
-
[解決済み] javacが「using unchecked or unsafe operations」という警告を出す原因は何ですか?
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] 文字列が数値(float)であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] GsonでList<T>オブジェクトをデシリアライズする?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ボタンでTextFieldをクリアする(Java)
-
[解決済み] 親から継承したメソッドの可視性を下げることができない [重複]。
-
[解決済み] java.util.MissingFormatArgumentException: 形式指定子 '%s' がありません。
-
[解決済み] 型の不一致:ArrayListからListへの変換ができない
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] javaでメソッドを呼び出すプログラムのエラー修正
-
[解決済み] JavaFX 同じパッケージ内なのに「場所が必要です。
-
[解決済み] Javaコンパイラーエラー:ステートメントではありません
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] Javaでdoubleをfloatに変換する