[解決済み】JavaリフレクションのgetFieldsとgetDeclaredFieldsの違いは何ですか?
2022-04-07 18:59:10
質問
の違いについて少し混乱しています。
getFields
メソッドと
getDeclaredFields
メソッドを使用します。
私はそれを読んで
getDeclaredFields
を使うとクラスのすべてのフィールドにアクセスできるようになり
getFields
はパブリックフィールドのみを返します。もしそうであれば、なぜいつも
getDeclaredFields
?
どなたか、この件について詳しく説明してください。2つの方法の違いや、いつ、なぜどちらかを使いたいのか、説明してください。
どのように解決するのですか?
すべての
public
フィールドを、クラス階層全体にわたって表示します。
すべてのフィールドは、アクセシビリティに関係なく、現在のクラスのものであり、現在のクラスが継承している可能性のあるベースクラスではありません。
すべてのフィールドを階層的に取得するために、次のような関数を書きました。
public static Iterable<Field> getFieldsUpTo(@Nonnull Class<?> startClass,
@Nullable Class<?> exclusiveParent) {
List<Field> currentClassFields = Lists.newArrayList(startClass.getDeclaredFields());
Class<?> parentClass = startClass.getSuperclass();
if (parentClass != null &&
(exclusiveParent == null || !(parentClass.equals(exclusiveParent)))) {
List<Field> parentClassFields =
(List<Field>) getFieldsUpTo(parentClass, exclusiveParent);
currentClassFields.addAll(parentClassFields);
}
return currentClassFields;
}
は
exclusiveParent
からフィールドを取得することを防ぐために提供されています。
Object
. それは
null
が必要な場合は
Object
のフィールドを使用します。
明確にするために
Lists.newArrayList
はグアバからきています。
更新情報
参考までに、上記のコードはGitHubで公開されている私の LibEx プロジェクトで ReflectionUtils .
関連
-
[解決済み] Spring Data JPAにおけるCrudRepositoryとJpaRepositoryのインターフェースの違いは何ですか?
-
[解決済み] android.support.v4.app.FragmentActivity' で 'TAG' がプライベートアクセスされている。
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] 静的メソッドを使用する場合
-
[解決済み] JavaでgetPath()、getAbsolutePath()、getCanonicalPath()はどう違うのですか?
-
[解決済み] JavaにおけるRunnableインターフェースとCallableインターフェースの違いについて
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] java.lang.IncompatibleClassChangeError: Mongo クラスを実装しています。
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] javax.naming.NameNotFoundException
-
[解決済み] 1行目2列目でBEGIN_ARRAYを期待したが、BEGIN_OBJECTだった。
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] 文字列の巻き方
-
[解決済み] java.io.IOException。DER長の短い読み取り