Java - 指定されたデータ型のクラスフィールドを見つける

Java –指定されたデータ型のクラスフィールドを検索

いくつかのJavaリフレクションAPIの例。

1. すべてのフィールドとデータ型を表示する

クラスによって宣言されたすべてのフィールドをループするJavaリフレクションの例。

1.1 A POJO.

CompanyA.java

package com.example.test;

import java.util.List;
import java.util.Map;
import java.util.Set;

public class CompanyA {

    String orgName;
    int count;
    List comments;
    Set branches;
    Map extra;

    //...
}

1.2 Use Java reflection APIs getDeclaredFields() to loop over and display the field name and data type.

Test.java

package com.example.test;

import java.lang.reflect.Field;
import java.util.List;

public class Test {

    public static void main(String[] args) {

        Field[] fields = CompanyA.class.getDeclaredFields();
        for(Field f : fields){
            Class t = f.getType();
            System.out.println("field name : " + f.getName() + " , type : " + t);
        }

    }

}

出力

field name : orgName , type :class java.lang.String
field name : count , type :int
field name : comments , type :interface java.util.List
field name : branches , type :interface java.util.Set
field name : extra , type :interface java.util.Map

2. 指定されたデータ型のクラスフィールドを検索する

2.1 This example will find all fields with List data type.

Test.java

package com.example.test;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class TestAbc {

    public static void main(String[] args) {

        List list = getFieldNameWithListDataType();
        for(String data : list){
            System.out.println("List : " + data);
        }


    }

    private static List getFieldNameWithListDataType(){

        List result = new ArrayList<>();

        //CompanyA, refer 1.1
        Field[] fields = CompanyA.class.getDeclaredFields();
        for(Field f : fields){

            // use equals to compare the data type.
            if(f.getType().equals(List.class)){
                result.add(f.getName());
            }

            //for other data type

            //Map
            //if(f.getType().equals(Map.class))

            //Set
            //if(f.getType().equals(Set.class))

            //primitive int
            //if(f.getType().equals(int.class))
            //if(f.getType().equals(Integer.TYPE))

            //primitive long
            //if(f.getType().equals(long.class))
            //if(f.getType().equals(Long.TYPE))

        }

        return result;

    }

}

出力

comments

Note
intのようなプリミティブ型の場合、int.classまたはInteger.TYPEと比較できます。

Related