每次我想在arraylist上调用方法时,我希望能够调用
,而不是在外部使用foreachArrayList<String>.setText(); //Example.
我尝试使用反射,但我不确定如何实现它;
public class Array extends ArrayList
{
public Array(Collection collection) {
super(collection);
}
public void invokeMethod(String nameOfMethod, Object object)
{
for(int index = 0; index < size(); index++){
get(index).getClass().getMethod(nameOfMethod, object.getClass());
}
//Example of a single object invocation.
try {
method = obj.getClass().getMethod(methodName, param1.class, param2.class, ..);
} catch (SecurityException e) {
// ...
} catch (NoSuchMethodException e) {
// ...
}
}
}
有谁知道如何实现这个?
答案 0 :(得分:3)
Java 8已经提供了这种功能,因此尝试自己实现它是没有意义的。
例如:
ArrayList<SomeClass> list = ...;
list.forEach(o -> o.SomeMethod());
或
list.forEach(SomeClass::SomeMethod);
答案 1 :(得分:0)
您可以在Java 8之前构建自己的forEach。您只需要一个接口和匿名类。
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String... args) {
List<MyClass> list = new ArrayList<>();
for(int i = 0; i < 10; i++) {
list.add(new MyClass());
}
forEach(list, new Consumer<MyClass>() {
@Override
public void accept(MyClass t) {
t.beep();
}
});
}
public static <T> void forEach(Iterable<T> iterable, Consumer<T> consumer) {
for (T t : iterable) {
consumer.accept(t);
}
}
}
interface Consumer<T> {
void accept(T t);
}
class MyClass {
public void beep() {
System.out.println("beep");
}
}