I wanna implement a javascript like method in java , is this possible ?
Say , I have a Person class :
public class Person {
private String name ;
private int age ;
// constructor ,accessors are omitted
}
And a list with Person objects:
Person p1 = new Person("Jenny",20);
Person p2 = new Person("Kate",22);
List<Person> pList = Arrays.asList(new Person[] {p1,p2});
I wanna implement a method like this:
modList(pList,new Operation (Person p) {
incrementAge(Person p) { p.setAge(p.getAge() + 1)};
});
modList receives two params , one is a list , the other is the “Function object”, it loops the list ,and apply this function to every element in the list. In functional programming language,this is easy , I don’t know how java do this? Maybe could be done through dynamic proxy, does that have a performance trade off compares to native for loop ?
You can do it with an interface and an anonymous inner class implementing it, like
Note that with varargs in Java5, the call to
Arrays.asListcan be simplified as shown above.Update: A generified version of the above:
Note that with the above definition of
modList, you can execute anOperation<Person>on e.g. aList<Student>too (providedStudentis a subclass ofPerson). A plainList<E>parameter type would not allow this.