2011-12-01 6 views
3

일부 클래스를 Invokable로 표시해야합니다. 리플렉션을 사용하여 클래스의 메서드를 호출 할 수 있다고 말하기 위해서입니다. 그러나 나는이 목적을 위해 단지 빈 인터페이스를 가지고 있다는 생각을 좋아하지 않는다. 주석을 사용하여이를 수행 할 수 있으며 아래 예에서 동작을 유지할 수 있습니까? someMethod, 당신은 주석을 사용할 수 없습니다마커 인터페이스 또는 특수 효과?

Example

class ClassOne implements Invokable { 
} 

class ClassTwo implements Invokable { 
} 

void someMethod(Invokable inv) { 
} 

답변

6

때문에 (나는 내 ​​자신의 주석을 만든 적이없는, 그래서 나는 깊이 그들에 익숙하지 않다). 아마도 나중에 Invokable에는 유용한 방법이 필요할 수 있습니다.

휠을 다시 발명하기 전에 Callable, Future 등과 같은 기존 인터페이스도 확인하십시오.

+0

:-)하지 않는 방법 가정, 주석 단에서 모든 설계에 영향을 미치지 않는 일부 속성처럼, 그들이입니까? 그럼 인터페이스를 사용합니다. 명확하게 해 주셔서 감사합니다. – user219882

+0

네,하지만 당신의 경우에는 그 유형을 쉽게 사용할 수 없다는 점이 있습니다. 예를 들어 어떤 클래스를'@Foo'로 표시하면 클래스가 * Foo 인터페이스를 구현한다는 것을 의미하지 않습니다. – Ingo

2

Class.getAnnotations()를 사용하여 클래스의 주석을 가져와 Invokable 주석을 검색 할 수 있습니다. 그런 다음 호출 할 메소드를 가져 와서 호출 할 수 있습니다.

2

결정은 이러한 클래스를 어떻게 사용할지에 따라 달라집니다. 몇개의 Invokable 클래스와 몇몇 클래스가있는 경우, 주석을 사용하는 것이 더 좋을 것입니다. 객체/클래스를 전달하고 주석을 확인하십시오. 전달할 클래스가 모두 Invokable이 될 것이라는 것을 안다면, 마커 인터페이스로 갈 수 있습니다.

즉 것은 내가 그것을 이해한다면 당신이하는 동작을 유지하려는 및