Java - 获取某些类型的字段名称

Mar*_*daj 1 java reflection

我在下面有一个示例类,我想返回某些类型的所有类字段,在此类型为Image的示例中.

public class Contact {
    private String surname, lastname, address;
    private int age, floor;
    private Image contactPhoto, companyPhoto;
    private boolean isEmployed;

    public String[] getAllImages() {
        String images[] = // missing code
        return images;
        // in this case, I want to return {"contactPhoto","companyPhoto"}
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要一个帮助.如何查找特定类型的所有类字段.我将在另一个类c中调用此方法.

Kev*_*sox 5

使用反射来访问类上声明的字段.然后迭代字段并检查它们的类型是否匹配Image.

您还可以通过接受target Class和searchType这两个参数来创建更有用的方法Class.然后该方法将搜索具有target该类型的字段searchType.

我还建议将此方法设为静态,因为它实际上不依赖于任何类状态.

public class Contact {
    private String surname, lastname, address;
    private int age, floor;
    private Image contactPhoto, companyPhoto;
    private boolean isEmployed;

    public static String[] getFieldsOfType(Class<?> target, Class<?> searchType) {

        Field[] fields  = target.getDeclaredFields();

        List<String> results = new LinkedList<String>();
        for(Field f:fields){
            if(f.getType().equals(searchType)){
                results.add(f.getName());
            }
        }
        return results.toArray(new String[results.size()]);
    }

    public static String[] getAllImages(){
        return getFieldsOfType(Contact.class, Image.class); 
    }

    public static void main(String[] args) {
        String[] fieldNames = getAllImages();

        for(String name:fieldNames){
            System.out.println(name);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)