2013-09-27 8 views
0

현재 배열의 페이지의 방법을 저장하고 있습니다. 그러나 나는이 방법을 arraylist에 저장하고 싶지만, 무엇이 잘못되었는지는 확신하지 못합니다.arraylist에 Java의 저장 방법

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

메서드를 저장하지 않고 반환 값을 저장하고 있습니다. –

+0

메소드가 Java에서 "first class"가 아니기 때문에 * 실제로 * ArrayList에 메소드를 저장하는 것이 아닙니다. 대신 당신은 그 메소드의 리턴 값을 저장하고있다. – jedwards

+1

그 제목은 나를 깜짝 놀라게했다! !! –

답변

0

시도 그들의 반환 값 대신

대신

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

방법을 저장하려면 실제로 메서드를 저장하지만 반환 유형은 this가 있습니다.

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을 만들 것입니다.

물론 인스턴스 멤버 컨텍스트 내에서 실행하지 않는 한.

0

대, 방법은 개체 수 없습니다. 배열 또는 ArrayList에 메서드를 저장할 수 없습니다.

1

당신은 당신이하지 않은 사실보다는 다른 메모에서

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

이것이 OP가 어떤 것인지에 대해서는 생각하지 않지만 확실히 그렇습니다. 공장. 여기에 저장된 "Method"객체는 메서드 자체가 아닙니다. 메소드에 관한 정보를 제공하는 객체입니다. :) – stepanian

0

Fist point to say 메서드를 저장할 수 없으며 반환 값 만 저장할 수 있습니다.

반환 된 값을 목록에 저장하는 데 문제가 없습니다.

0

개체 배열을 저장하십시오. 객체에는 메소드가 있으므로 메서드를 호출하거나 특수 목적으로 리플렉션을 사용하여 액세스 할 수 있습니다.

당신이하려는 것은 명확하지 않지만, WizardPage 클래스의 3 개 개체와 일부 문자열 필드가 있고 아마도 void doPageUpdateStuff()과 같은 메서드가있는 것처럼 보입니다. 반면에, 모든 작업은 생성자에서 수행 될 수 있습니다.

관련 문제