【问题标题】:Java storing method into arraylist [closed]Java将方法存储到arraylist中[关闭]
【发布时间】:2013-09-27 03:22:23
【问题描述】:

目前我正在将页面的方法存储到数组中。但我想将这些方法存储到 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;

       }

【问题讨论】:

  • 你存储的不是方法,而是返回值。
  • 您并没有实际上将方法存储在 ArrayList 中,因为方法不是 Java 中的“第一类”。相反,您正在存储这些方法的返回值。
  • 那个标题吓到我了!!!
  • @GV 嘿,我确实将 java.lang.reflect.Method 存储到 ArrayLists 中了几次...不过这不是童话...跨度>

标签: java methods arraylist


【解决方案1】:

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

而不是

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 ...
}

【讨论】:

  • 我认为这不是 OP 所追求的,但它确实有效。这里存储的“方法”对象不是方法本身。它是一个提供有关方法信息的对象 :)
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      拳头说方法不能存储,只能存储返回值

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

      【讨论】:

        【解决方案5】:

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

        你想要做什么还不清楚,但看起来你想要 3 个 WizardPage 类的对象,带有一些字符串字段,并且可能有像 void doPageUpdateStuff() 这样的方法。另一方面,也许所有的工作都可以在构造函数中完成。

        【讨论】:

          猜你喜欢
          • 2014-01-14
          • 1970-01-01
          • 2016-08-01
          • 2015-02-24
          • 2021-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多