假设我有这门课.
class People { private String name; private int age; /** other stuff constructor / getters / setters / etc. **/ }
让我们说我有这个清单:
Listpeople = Arrays.asList(new People("Mark", 21), new People("Bob",17), new People("Alex", 22));
现在我希望能够获得List
特定属性的所有用户.
使用Java 8,我可以创建一个接受我想要的函数的方法:
public staticList processElements(Iterable source, Function mapper) { List l = new ArrayList<>(); for (X p : source) l.add(mapper.apply(p)); return l; }
然后我将能够执行一些调用:
ListlistNames = processElements(people, p -> p.getName()); List listAges = processElements(people, p -> p.getAge());
然而,这在Java 7中是不可能的(我知道它存在于Guava中,但我只想使用JDK来提出解决方案).
这是我用反射得到的:
public static List
现在我可以做一些List
非常有效的事情.
但我觉得不舒服:
我得到了一个 List
每当我使用反射时,我总觉得它存在一个更好的实现而不使用它
使用field.setAccessible(true);
不是很安全
所以我的问题是:
是否可以在不使用JDK反射(不使用Guava或Functional Java)的情况下执行相同的操作?
如何根据我作为参数传递给我的方法的字段类型获取String或Integer列表?
谢谢