2009-10-20 7 views
4

Bar가 단일 메소드에서만 사용되는 경우에도이 시나리오의 전체 인터페이스를 매개 변수화해야합니까?Java generics - 메소드 매개 변수

public interface IFoo<T>{ 

    void method1(Bar<T> bar); 

    //Many other methods that don't use Bar.... 

} 

public class Foo1 implements IFoo<Yellow>{ 

    void method1(Bar<Yellow> bar){...}; 

    //Many other methods that don't use Bar.... 

} 


public class Foo2 implements IFoo<Green>{ 

    void method1(Bar<Green> bar){...}; 

    //Many other methods that don't use Bar.... 

} 

답변

5

아니요, 구문 관점에서 필요하지 않습니다. 또한이 작업을 수행 할 수 있습니다

public interface IFoo { 

    <T> void method1(Bar<T> bar); 

    /* Many other methods that don't use Bar… */ 

} 

또는이 :

public interface IFoo { 

    void method1(Bar<?> bar); 

    /* Many other methods that don't use Bar… */ 

} 

올바른 선택은 IFoo의 의미와 무엇의 구현들이 method1을 통해받는 Bar 인스턴스 할 가능성에 따라 달라집니다.

+0

+1 좋은 코드 샘플은 독자를 도울 수 있습니다 ... – KLE

0

인터페이스를 확장하지 않습니다. 그게 신중한가요? 이 작업을 수행 할 수 있습니다

public class Foo2 implements IFoo<Green> { 
    void method1(Bar<Green> bar); 
} 

그냥 이렇게 :
public class Foo<Green> { 
    void method1(Bar<Green> bar); 
} 

는 컴파일되지 않습니다.

+0

죄송합니다. 구현해야합니다. – tinkertime

+0

당신이 그걸 지적해서 기뻐요. 그것은 질문을 많이 개선했기 때문에 더 많은 사람들이 지금 대답하려고 노력할 것입니다 :-) – KLE

2

need에 비용이 제시 되었기 때문에 조금 다른 질문을하게됩니다. 실제로는 그렇지 않습니다. 나는 하나 또는 여러 가지 방법으로 실제로 사용된다면 실제로 중요하지 않다고 생각합니다.

인스턴스를 여러 번 호출하면 형식 매개 변수는 어떻게 다릅니 까?는 :

  • 인스턴스를 인스턴스화하면 일정 , 당신은 전체 인터페이스를 파라미터.
  • 의 경우 각 호출마다 다를 수 있습니다., 메서드를 매개 변수화합니다.

그런 식으로 매개 변수의 유형은 실제로 코드에 대한 정보를 제공하여 의미와 명확성을 향상시킵니다. 편집


: 실시 예

때때로 경우, 타입 파라미터
그것은 방법 파라미터이어야 ... 동일한, 예를 들어 통화 할 때마다 다르다.

+0

IFoo의 일부 구현은 매개 변수 유형을 일정하게 유지하지만 다른 구현은 달라질 수 있습니다. – tinkertime

+0

I do not 일부 구현에서는 특정 유형 매개 변수를 적용하는 반면 다른 메소드에서는 변경할 수있는 방법이있을 것이라고 생각합니다. – ColinD