class Test<G extends String>{
public G test(){return null;}
public List<G> tests(){return new ArrayList<>();}
}
public void doTest(Test t){
//works fine
String str = t.test();
//Compile error: expected String found Object
str = t.tests().iterator().next();
}
Type G가 String 하위 클래스에 바인딩되었으므로 마지막 줄에서 Object 대신 String 인스턴스를 반환하고 싶습니다. 캐스팅 이외의 다른 방법이 있습니까?왜 정의되지 않은 제네릭 형식 컬렉션은 다른 클래스에 바인딩되어 있어도 Object를 기본값으로 사용합니까?
때문에 원시 유형의 일반 바인딩 당신은 처음부터 고려하지 않습니다 당신처럼 결코 정의되지 수업을 전혀 제네릭으로 만들지 않았습니다. 이것은 부분적으로는 Java 1.5 이전에 제네릭이 Java에 존재하지 않았기 때문에 설명하는 동작을 구현할 방법이 없었기 때문입니다. – awksp
이 경우 t.test()도 Object를 반환하지 않아야합니까? – Gus
음 ... 흥미로운 점. 처음에는 그걸 놓쳤습니다. 이 경우에는 반환 된'ArrayList'가 원시 타입이 될 것입니다. 't.test()'가'String'을 리턴하는 이유를 확실히 모릅니다. – awksp