有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用反射来获取泛型类的字段

我想使用反射来获取泛型类“T”的字段,以便从所有Type=String字段构建一个基本的过滤器谓词

使用T.getFields似乎不是我所想使用的选项

这个类将用于JTextField,我打算用它来搜索各种对象。我将传递其他搜索条件,但对于基本功能,我希望默认搜索所有字符串字段

public class SearchListener<T,C extends Collection<T>> implements DocumentListener {

private JList jlist;
private C staticCollection;
private List<Predicate<T>> predicateList = new ArrayList<>();
 //get the String fields, and build Predicate from them.. add to predicateList.



public SearchListener(JList jlist, List<Predicate<T>> predicateList, C collection) {        
    this.jlist = jlist;
    this.staticCollection=collection;
    this.predicateList=predicateList;
}

@Override
public void insertUpdate(DocumentEvent de) {
    filter();
}

@Override
public void removeUpdate(DocumentEvent de) {
    filter();
}

@Override
public void changedUpdate(DocumentEvent de) {
    filter();
}

private void filter() {
    jlist.setModel((ListModel)staticCollection);
    C items = (C) jlist.getModel();

    Stream<T> itemStream = items.stream().filter(x ->{
        Stream<Predicate<T>> predicateStream= predicateList.stream();
        return predicateStream.map(predicate -> predicate.test(x)).reduce((a,b)->a && b).get();
    });
    ArrayList<T> collect = itemStream.collect(Collectors.toCollection(ArrayList::new));
    C name = (C)collect;
    jlist.setModel((ListModel)name);
}

}


共 (0) 个答案