0

目前我正在将页面的方法存储到数组中。但我想将这些方法存储到 arraylist 中,但不确定它有什么问题。

WizardPage[] pages={pageone(), pagetwo(), pagethree()};

相对

List<WizardPage> pageStore = new ArrayList<WizardPage>();

pageStore.add(pageone());
pageStore.add(pagetwo());
pageStore.add(pagethree());

public WizardPage pageone() {

            WizardPage pageone = new WizardPage("one","page 1");

            Do something~

           return pageone;

       }

public WizardPage pagetwo() {

            WizardPage pageone = new WizardPage("two","page 2");

            Do something~

           return pagetwo;

       }

public WizardPage pagethree() {

            WizardPage pageone = new WizardPage("three","page 3");

            Do something~

           return pagethree;

       }
4

5 回答 5

2

如果你想存储方法而不是它们的返回值,那么

代替

List<WizardPage> pageStore = new ArrayList<WizardPage>();
pageStore.add(pageone());
pageStore.add(pagetwo());
pageStore.add(pagethree());

尝试

List<Method> pageStore = new ArrayList<Method>();
try {
    pageStore.add(this.getClass().getMethod("pageone"));
    pageStore.add(this.getClass().getMethod("pagetwo"));
    pageStore.add(this.getClass().getMethod("pagethree"));
} catch ...
}
于 2013-09-27T03:28:09.857 回答
0

与您实际上并没有存储方法,而是存储它们的返回类型这一事实不同,您得到了这个

List<WizardPage> pageStore = new ArrayList<WizardPage>();

pageStore.add(pageone());
pageStore.add(pagetwo());
pageStore.add(pagethree());

由于所有方法pageX()都是实例方法,因此您需要一个实例来调用它们。假设这些方法出现的类被调用WizardBook,你需要类似的东西

WizardBook book = new WizardBook();
List<WizardPage> pageStore = new ArrayList<WizardPage>();

pageStore.add(book.pageone());
pageStore.add(book.pagetwo());
pageStore.add(book.pagethree());

或者制作方法static

...当然,除非您在实例成员上下文中运行它。

于 2013-09-27T03:31:11.630 回答
0

拳头说你不能存储一个方法,你只能存储它的返回值

我认为将返回的值存储到列表中没有任何问题。

于 2013-09-27T03:32:35.427 回答
0

存储对象数组。对象具有方法,因此您可以访问(调用或出于特殊目的使用反射)这些方法。

您要做什么尚不清楚,但看起来您想要 3 个 class 对象WizardPage,带有一些 String 字段,并且可能具有类似void doPageUpdateStuff(). 另一方面,也许所有的工作都可以在构造函数中完成。

于 2013-09-27T03:50:04.493 回答
0

在 Java 中,方法不是对象。您不能将方法存储在数组或 ArrayList 中。

于 2013-09-27T03:24:28.053 回答