2016-07-14 3 views
1

go() 함수가 포함 된 동일한 인터페이스에서 모두 상속되는 개체 목록을 갖고 싶습니다.자바 : 확장 일반 목록에서 인터페이스 함수 호출

public interface goers{ 
    public void go(); 
} 

는 지금은 그냥 나는 내가하고 싶은 List<Class<? extends goers>>가 다른 클래스에서 그 A, B, 및

C.

를 부르 자 모든 단순성을 위해, 이동 구현하는 3 종류가 있습니다.

for (Class<? extends goers> gos : list) 
    { 
     gos.go(); 
    } 

컴파일러가 인터페이스의 go 메서드를 모든 멤버 멤버에 적용하지 않기 때문에 컴파일되지 않습니다.

+2

'List '또는'List >'? 그것은 중요. (두 번째 것은'.go() '라고 할 수 없으며, 처음에는 할 수 있습니다.) –

+0

질문을 업데이트하십시오, 두 번째 것입니다. – NolanPower

+2

Java 명명 규칙을 따라야합니다. –

답변

7

List<Class<? extends goers>>에는 을 호출 할 수있는 goers 인스턴스가 없습니다. 방금 클래스가 있고 그 클래스의 인스턴스가 없습니다. .go()에 전화 할 내용이 없습니다.

먼저 클래스를 인스턴스화하거나 List<goers>을 사용하여 인터페이스 사용 방법을 호출 할 수 있습니다.

+0

@Andreas 그건 내가 "그 클래스를 인스턴스화하려고했다"는 의미입니다. –

+0

그래, 나는 두 번째 단락을 추가하기 전에 그것을 쓰고 있었다. 제 의도는 당신도 그것을 보여주는 예였습니다. ;-) – Andreas

+0

고마워, 내 두뇌가 완전히 whiffed하고 목록의 유형으로 인터페이스를 가질 수 없다고 생각하고 내 모든 문제가 발생했습니다. 내가 할 수 있으면이 대답을 받아 들일 것이다. – NolanPower

2

go()Class<T>의 메서드가 아니기 때문에 Class<T> 인스턴스에서 해당 메서드를 호출 할 수 없습니다. https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html의 메소드 만 사용해야합니다.

goers [sic - 명명 규칙을 따르면] 인스턴스를 원하면 어떻게 든 가져와야합니다. 예를 들어, https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#newInstance--을 사용할 수 있습니다.

당신의 중요한 문제는 당신이 반성하기 쉽고 고급스럽고 진보적 인 기술을 사용하고 있다는 것입니다. Class 개체 대신 goers [sic - 명명 규칙을 따르는] 인스턴스 목록을 전달하지 않으시겠습니까?

+0

OP가 (현재) 리플렉션을 사용하고 있지 않습니다. –

+0

'List >은 반성입니다. –