Regionプログラムでハマったエラーとその解決方法についての備忘録メモ2019-06-27【Java】親に持つGenerics(総称型)<T>のClassを取得するJava備忘録がてらに、こちらへメモ。以下の様なクラス構成に於ける「Generics(総称型)<T>」のクラスの取得方法について。{}ここでやりたいことは、BaseController内からGenerics(総称型)<T>が何のクラスなのかを突き止めたいというもの。インターネット上では「Generics(総称型)<T>のインスタンスを作るにはどうしたら良いか?」という質問をチラホラ見かける。T()」はできないというのが常識ですが、裏技的な方法でクラスを取得することは可能。クラスさえ取得できれば、リフレクションを駆使してインスタンスを作ることもできるかもしれない。「Generics(総称型)<T>」のクラス取得処理を実現する方法は2つある。親のコンストラクタに「Tの可変長引数」を使用する可変長引数は「メソッドの引数の数を指定せず、任意に取る様にできる」機能のこと。変数]の形で指定し、メソッド内でその変数は「指定したクラスの配列」として利用することができる。以下の例ではコンストラクタにこれを利用し「引数を0個与える」ことで「Generics(総称型)<T>の配列」を取得する。配列からは「それが何のクラスの配列なのか」を取得できるので、「Generics(総称型)<T>」の正体のクラスを取得することができる。}}この状態でHogeControllerのインスタンスを作成し、genericsClazzを取得すると以下の様になる。Hogeただしこの方法は、場合によっては使用できないため注意が必要。「コンストラクタが複数ある場合で、別のコンストラクタからこのコンストラクタを呼んだ場合」、取得できるのは「Hoge」ではなく「Object」になってしまう。リフレクションでGenerics(総称型)そのものを取得するこちらについては解説を省きますが、1に比べると使用できる状況に制限はない。リフレクションなので実行速度が気になるところ。Java8以降で使用できるStreamAPIを利用しているが、別に利用しない用に書き換えることは可能。Hoge探せば他にももっと良い方法があるのかもしれない。00:38【Java】親に持つGenerics(総称型)<T>のClassを取得するTweet広告を非表示にする関連記事2020-02-01【Java】文字列のnullの連結にご注意をJavaでのお話。個人的に知らなかった、文字列の結合の仕様につ...2020-01-27【Java】Auto-UnboxingでのNullPointerExceptionにご注意をNullに対してAuto-Unboxingが働くと、NullPointerExceptionが発...2019-12-27【Java】Optional.orElse()の落とし穴またしょーもない所で詰まったので備忘録がてらにメモ。(クローラー対策のため★を@に変更してください)はてなブログをはじめよう!PlugOutさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。