2016-10-11 2 views
1

미안하지만 어리석은 질문 일 수도 있지만 답변을 찾을 수 없습니다.Generics 매개 변수가 Java 메소드의 다른 매개 변수를 확장합니다

메서드에 대한 두 개의 generics 매개 변수 중 하나가 다른 매개 변수를 확장 할 수 있습니까?

public class A { 
} 

public class B extends A { 
} 

public class C { 
} 

public class Foo { 

    public static <R extends A> void f1 (A t, R r){ 
    } 

    // T and R are generics parameter, R bounds on T 
    public static <T, R extends T > void f2(T t, R r) { 
    } 

    public static void main(String[] args) { 

     A a = new A(); 
     B b = new B(); 
     C c = new C(); 

     Foo.f1(a, b); // no error 
     Foo.f1(a, c); // compile error, it's ok 

     Foo.f2(a, b); // no error 
     Foo.f2(a, c); // no error ! why? 
    } 
} 

마지막 f2 메소드 호출에는 컴파일 오류가없는,하지만 난 C이 오류가 arised해야 컴파일 A의 서브 클래스가 아닌 생각합니다. 어떤 도움이 필요합니까?

+0

왜 'T'가 'A'라고 생각합니까? – user2357112

답변

3

메소드를 호출하는 코드의 유형 매개 변수가 암시 적이기 때문에 (예 : java 컴파일러가 TR ~ Object을 유추하는 경우) 괜찮습니까? 하지만 명시 적으로 선언하면 오류가 발생합니다.

Foo.<A, C>f2(a, c); //error as you wished 
Foo.<Object, Object>f2(a, c); //no errors and it's ok, isn't it? 
관련 문제