2012-08-29 3 views
3

좋은 하루.Java에서 클래스의 메서드 배열을 만드는 방법

나는 수학 연습을 위해 연습용으로 사용할 수업이 있습니다. 클래스는 일련의 메소드로 구성되며, 각각 하나의 유형의 연습을 생성합니다.

다음 임의의 유형의 임의의 임의의 운동을 생성하는 방법을 만들고 싶습니다. 이렇게하려면 배열에 메서드 이름을 임의의 항목으로 저장하는 방법을 생각했습니다.

지금까지 그렇게 좋았습니다.

미래에는 새로운 운동 유형을 생성하는 메소드를 추가 할 것이므로 동적으로 메소드의 배열을 생성하는 방법이 있는지 알고 싶습니다. 일단 클래스가로드되면 생성자는 사용 가능한 메소드를 점검하고 배열에 이름을 저장하십시오.

그럴 수 있습니까? 그리고 그렇다면 어떻게?

+0

[Reflection API] (http://docs.oracle.com/javase/tutorial/reflect/index.html)에 대해 자세히 알아보십시오. – Jesper

+0

모두에게 감사드립니다. 대체 아키텍처를 제안한 사람들에게 특별한 감사의 말을 전합니다. 가능한 빨리 확인해 보겠습니다. 나는 가장 직접적인 대답을 받아 들였다. 친절 감사합니다 – DavidTonarini

답변

3

대신 이름을 저장하는 당신이 저장할 수있는 방법 프록시 당신은이를 통해 갈 필요가

Method[] methods = getClass().getDeclaredMethods(); 

은 테스트되지 않는 추가하는 방법을 무시합니다.

+1

..! 정말 일했습니다 .... – Hassan

2

당신은 방법을 호출하는 동안 너무 많은 일이 잘못 갈 수 있다는 것을 미루어

Method[] methods= Class.forName("ClassTo test").getDeclaredMethods(); 

사용 가능한 방법을 확인 Reflection API를 사용할 수 있습니다.

당신은

interface IExercise 
{ 
    void createExercise(); 
} 
class Exercise1 implements IExercise 
{ 
    @Override 
    public void createExercise() 
    { 
    } 
} 

을함으로써 그것을 피할 수 있습니다 그리고 당신은 무작위로 Exercise를 생성하는 IExercise[]를 사용할 수 있습니다.

+1

유권자 설명해주십시오. –

+0

아마도'In Java는 런타임에 메소드를 생성 할 수 없습니다. '라는 것은 오해의 소지가 있습니다. 아마도'ClassName.class.getDeclaredMethods()'가 짧고 오류가 적기 때문일 것입니다. (면책 조항 : 나는 아니었다) –

+0

@JacobRaihle 나는 그렇게 생각한다. 답변을 수정했습니다. 어쨌든 감사합니다 :) –

0

같은 객체 생성 :

MathExample math = new MathExample(); 

을 그리고 당신은 클래스의 방법을 발견하는 반사를 사용할 수 ArrayList<Objects>

6

에 추가합니다.

그러나 내 의견으로는, 그것은 나쁜 아키텍처입니다. 다른 연습을 처리하는 더 좋은 방법은 *Exercise 클래스로 구현되는 인터페이스 IExercise을 만드는 것입니다. 그런 다음 해당 객체를 만들어 배열에 넣고 무작위로 선택하십시오.

http://en.wikipedia.org/wiki/Strategy_pattern

가 어떻게이 문제에 적용됩니다 : 그런 다음 전략 패턴을 찾고 ... 인터페이스 또는 뭔가에서 지정된 방법 내가 권 해드립니다 highy

3

전화? 공통 인터페이스를 구현하는 객체를 만들고이 객체의 List를 사용하면됩니다.

매우 유용한 패턴을 연습 할 수도 있습니다.

1

저는 여러분이 Command 패턴을 사용하고 각 연습을 마커 인터페이스 (ICommand)를 구현하는 명령 클래스로 저장하는 것이 더 안전하다고 생각합니다.그런 다음 리플렉션을 사용하여 classpath에 ICommand를 구현 한 모든 클래스가 실행할 수있는 연습 목록을 런타임에 검색 할 수 있습니다. 이렇게하면 임의의 선택 코드로 컬렉션에 디자인 할 모든 새로운 유형의 운동을 추가하지 않아도됩니다.

http://en.wikipedia.org/wiki/Command_pattern

이는 전략 패턴은 아래의 제안에 다소 유사하다.

0

생각해 보면 chain of responsibility 및 stroe 명령을 배열로 만드는 것이 더 좋습니다. 무작위로 명령을 선택하고 체인에 넣습니다.

관련 문제