저는 보통 Java에 익숙하지 않은 C# 개발자이고 Generics를 사용하여 일부 코드를 설정하려고합니다. 나는 보통의 C# 개발자 해요,X가 T와 일치해야하더라도 X를 T로 변환 할 수 없습니까?
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from x.MyDerived to T
at x.Main.getMeStuff(Main.java:14)
at x.Main.main(Main.java:9)
로 말했다, 그래서 코드는 먼저 눈에 잘 보이는 :
는// Main.java
public static void main(String[] args) {
MyBase my = getMeStuff();
System.out.println(my.getSomething());
}
private static <T extends MyBase> T getMeStuff(){
return new MyDerived(123);
}
// MyBase/MyDerived.java
public class MyBase {
private final int something;
protected MyBase(int something) { this.something = something; }
public int getSomething() { return something; }
}
public class MyDerived extends MyBase {
public MyDerived(int something) { super(something); }
}
이 컴파일에 실패 : 내 데모 코드는 다음과 같습니다. getMeStuff를 변경하여이 오류를 "해결할"수 있습니다 (T)에 캐스트를 추가 할 수 있지만 정말 필요한 캐스트? 내가 뭔가를 잊은 것처럼 조금 냄새가 난다.
고정 된 알려진 유형을 반환하는 경우 왜 제네릭을 사용합니까? –
@Oli 실제 구현이 더 복잡하기 때문에 많은 유형 중 하나를 반환 할 수 있기 때문에 (리플렉션을 통해 인스턴스화 된 클래스) –