호출자가 제공 한 도우미 개체를 사용하여 대상 데이터 구조로 로딩을 지원하는 일반 구성 로더를 작성하려고합니다. 도우미는 데이터 구조에 대한 지식으로부터 로더를 분리하고, 멤버 값을 사전 처리하고, 하부 구조를 만들고, 구조에 멤버를 추가/제거하는 메소드와 함께 사용됩니다.동일한 유형의 정적 중첩 클래스가있는 일반 클래스
public class ConfigLoader<T extends Object>
...
private final Class<T> stcClass;
와 정적 중첩 된 인터페이스 :
static public interface Helper<T>
{
public Object configValue(String qulfld , String loc);
public Object configValue(String qulfld, T val, String loc);
public Object configValue(String qulfld, String val, String loc);
public Object configValue(String qulfld, Boolean val, String loc);
public Object configValue(String qulfld, Number val, String loc);
public T crtObject();
public void addMember(T tgt, String fld, Object val);
public void rmvMember(T tgt, String fld);
}
및 기본 생성자 :
private ConfigLoader(JsonParser psr, Helper<T> hlp, DataStruct vld) {
super();
parser =psr;
helper =hlp;
stcClass =helper.crtObject().getClass(); // <== error here
validation =vld;
errors =new ArrayList<Fail>();
}
내가 컴파일러 오류가 점점 오전 클래스와 변수 선언을 감안할 때
생성자 행은 다음과 같습니다.
ConfigLoader.java:79: error: incompatible types
stcClass =helper.crtObject().getClass();
^
required: Class<T>
found: Class<CAP#1>
where T is a type-variable:
T extends Object declared in class ConfigLoader
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ? extends Object
1 error
목적은 다음 구조 유형을 확인하는 다른 코드를 사용하고 T
인수 helper.configValue(qulnam,stcClass.cast(val),loc.toString())
을 사용와 헬퍼 분 메소드를 호출 Class<T>
객체를 추출되는 전방 최대 하나 개의 더미 구조를 만드는 것이다 . 컴파일러는 도우미의 crtObject
메소드의 반환이 생성자에 전달 된 도우미는 자체가 Helper<T>
때문에 사실에 T
대상이 보장되는 것을 확인 할 수없는 이유
은 내가 알아낼 수 없습니다 같습니다.
내가보기에 유일한 대안은 생성자 인수로 Class<T>
을 전달하는 것입니다.
도움을 주시면 감사하겠습니다.
* 내가보고하고있는 유일한 대안이 같은'클래스'에 전달하는 다음과 같이 위해
컴파일러 오류를 제거하기 위해, 당신은 지금 안전 '를 사용하는 것은' '와 동일합니다. –
Class<? extends T>
에helper.crtObject().getClass();
전송할 수 있습니다 constructor argument. * 예, 타입 소거로 인해 클래스 타입을 알 수있는 다른 방법은 없습니다. 또한'무엇이'stcClass'입니까? –
도우미 클래스에 대상 클래스 개체가 있어야 인스턴스화 할 수 있습니다. 다음과 같이 정적 팩토리 메서드를 사용하면됩니다. public static Helper forClass (Class extends T>) {etc(); }' –
fge