[解決済み] オブジェクトを汎用型にキャストして返す
2022-04-26 08:03:22
質問
オブジェクトをメソッドの戻り値にキャストする方法はありますか? この方法で試したのですが、"instanceof"の部分でコンパイル時例外が発生しました。
public static <T> T convertInstanceOfObject(Object o) {
if (o instanceof T) {
return (T) o;
} else {
return null;
}
}
こちらも試してみましたが、実行時例外であるClassCastExceptionが発生しました。
public static <T> T convertInstanceOfObject(Object o) {
try {
T rv = (T)o;
return rv;
} catch(java.lang.ClassCastException e) {
return null;
}
}
簡単にできる方法はないでしょうか。
String s = convertInstanceOfObject("string");
System.out.println(s); // should print "string"
Integer i = convertInstanceOfObject(4);
System.out.println(i); // should print "4"
String k = convertInstanceOfObject(345435.34);
System.out.println(k); // should print "null"
EDIT: 正解の作業コピーを書きました。
public static <T> T convertInstanceOfObject(Object o, Class<T> clazz) {
try {
return clazz.cast(o);
} catch(ClassCastException e) {
return null;
}
}
public static void main(String args[]) {
String s = convertInstanceOfObject("string", String.class);
System.out.println(s);
Integer i = convertInstanceOfObject(4, Integer.class);
System.out.println(i);
String k = convertInstanceOfObject(345435.34, String.class);
System.out.println(k);
}
解決方法は?
を使用する必要があります。
Class
インスタンスを作成する必要があります。
public static <T> T convertInstanceOfObject(Object o, Class<T> clazz) {
try {
return clazz.cast(o);
} catch(ClassCastException e) {
return null;
}
}
の宣言は そのメソッド は
public T cast(Object o)
これは、配列型にも使用できます。以下のような感じでしょうか。
final Class<int[]> intArrayType = int[].class;
final Object someObject = new int[]{1,2,3};
final int[] instance = convertInstanceOfObject(someObject, intArrayType);
ただし
someObject
に渡されます。
convertToInstanceOfObject
はコンパイル時の型である
Object
.
関連
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
マスキング このリソースにアクセスするには、完全な認証が必要です。
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] Javaで汎用配列を作成する方法は?
-
[解決済み] 汎用型Tのクラスインスタンスを取得する方法を教えてください。
-
[解決済み] GsonでList<T>オブジェクトをデシリアライズする?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
最新
-
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
-
undefinedeclipse エラー。この行に複数のアノテーションが見つかりました: - 文字列を型解決に解決できない
-
eclipse アクセス制限です。タイプ 'xxx' は API ではありません(必須ライブラリ '' の制限)。
-
SpringBootApplication を型解決できない。
-
Dateが型に解決できない問題を解決する
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
サーブレットクラスのインスタンス化エラーの解決法
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。