我想学习如何创建方法的ArrayList。
public class a {
public static b (){}
public static c (){}
public static d (){}
public static e (){}
public static void main(String[] arg){
ArrayList<Method> lst = new ArrayList<Method>();
lst.add(1, a());
lst.add(2, b());
lst.add(3, c());
lst.add(4, d());
lst.add(5, e());
}
我想知道,为什么会这样,有人可以如此善意地解释:
public static Collection<? extends Method> a(){}
...
lst.addAll(1, a());
为什么要使用Collection? 为什么不简单地使用add(Object)?
哦,还有一件事。如何从ArrayList执行以后的方法?
for (Method i : lst){
i;}
感谢您的帮助。
答案 0 :(得分:3)
如果你想使用反射,你应该使用getDeclaredMethod
来获取方法,这里有许多其他答案。但是,为避免使用反射,Java代码中更常见(也许更清晰)的做法是创建一个可以提供以下实现的接口:
private static interface Foo {
public void doFoo();
}
public static Foo a = new Foo() {
public void doFoo() {
// Do 'a' stuff here.
}
}
public static Foo b = new Foo() {
public void doFoo() {
// Do 'b' stuff here.
}
}
...
public static Foo e = new Foo() {
public void doFoo() {
// Do 'e' stuff here.
}
}
public static void main(String[] arg){
ArrayList<Foo> lst = new ArrayList<Foo>();
lst.add(1, a);
lst.add(2, b);
lst.add(3, c);
lst.add(4, d);
lst.add(5, e);
}
然后,要调用该函数,您可以在列表中的每个doFoo()
对象上调用Foo
。
答案 1 :(得分:2)
从Java 7开始,您无法将方法视为变量,就像您在此处所做的那样。您需要使用Reflection来访问代表该方法的Method
对象。使用a
课程上的getMethod
method检索正确的Method
对象,您add
可以ArrayList
。
addAll
method将集合参数中的所有元素添加到您正在调用addAll
的集合中。如果你打电话给add(Collection)
,那么Collection
本身就是下一个新元素。
要调用由Method
表示的方法,请调用invoke
method。小心,getMethod
和invoke
方法都会抛出你自己必须捕获的Exception
个。
答案 2 :(得分:1)
通过对类对象使用Reflection来获取Method对象。
然后通过提供您希望他们操作的对象以及您希望提供的任何参数来调用它们。
阅读反思教程可能是个好主意:http://docs.oracle.com/javase/tutorial/reflect/
答案 3 :(得分:1)
你可以像这样在你的类中声明一个方法:
public class MyClass {
public void a() {
System.out.println("A!");
}
public static void main(String... args)
{
Method methodA = getClass().getDeclaredMethod("a");
}
}
答案 4 :(得分:1)
public static void b (){}
。lst.add(1, a());
将调用该方法并尝试将该方法的返回值添加到给定索引处的列表中。如果您要添加Method
,则需要使用反射list.add(a.class.getMethod("b"));