2016-10-28 4 views
-1

내가 다음과 같습니다 자바 클래스를 확장? 이러한 인스턴스화 뒤에자바의 생성자 키워드

thisThing theThing = new thisThing(ClassForThisThing.class); 

아이디어를 다음과 같이

class ClassForThisThing implements anInterface { 
    ... // interface methods go here 
} 

지금 당신이 thisThing을 인스턴스화 할 수 있습니다 : 먼저 anInterface를 구현하는 클래스를 정의 할 필요가 thisThing의 생성자를 호출하기 위해

+0

나는 당신의 질문을 이해하지 않을 수 있지만, 당신은 단순히 새로운 thisThing를 호출 할 필요는 없다()와 anInterface를 구현하는 객체를 인수로 전달합니까? – facundop

+1

자바 코딩 표준을 배우십시오 : ThisThing이어야합니다 – duffymo

+1

그냥 인터페이스를 구현하는 클래스를 전달하십시오 ... – Li357

답변

3

리플렉션을 통해 anInterface의 인스턴스를 만들 수있는 클래스를 보통 thisThing에게 제공합니다. 컴파일러는 항상 실행 시간에 성공할이

anInterface memberInstance = (anInterface)member.newInstance(); 

같은 캐스트 보장, 생성자에 클래스가 anInterface와 호환되는지 확인합니다.

1

나는 당신이 한 것을 좋아하지 않을 것입니다.

왜 안 되니? 제네릭은 필요 없습니다. 당신은 단지 작곡을하고 있습니다. AnInterface을 구현하는 모든 참조를 전달하십시오. Liskov 대체 원칙은 모든 것이 잘 작동 할 것이라고 말합니다. 여기

public interface AnInterface { 
    void doSomething(); 
} 

이 구현의 : 여기
public class ThisThing { 

    private AnInterface member; 

    public ThisThing(AnInterface member) { 
     this.member = member; 
    } 
} 

인터페이스의

public class Demo implements AnInterface { 
    public void doSomething() { System.out.println("Did it"); } 
} 
+0

요점은 그 일을하지 않은, 그것을 붙어 메신저입니다! – NWS

+0

뭘 한거야? 인터페이스를 구현 하시겠습니까? – duffymo

+0

정의 된대로 ... 제공된 그대로 제공됩니다. – NWS