에 관련된 항목이 열거 형을 만듭니다 (? 관련)나는 모든과 같이, 하나 개의 추상 클래스를 확장 몇 가지 특정 클래스가 치죠 클래스
public abstract AbstractClass {
// abstract stuff here
}
public FirstSpecificClass extends AbstractClass {
// specific stuff here
}
public SecondSpecificClass extends AbstractClass {
// specific stuff here
}
내가 각 항목이 연결되어있는 다른 곳에 enum
를 만들 필요를 특정 클래스 중 하나와; 이를 위해 생성자 매개 변수로 특정 클래스를 전달하고 열거 형 내에 개인 필드로 저장하고 있습니다 (해당 필드에 getter 메서드도 제공했습니다). 또한 특정 클래스 중 하나의 인스턴스를 인수로 사용하여 적절한 enum 요소 (또는 null)를 반환하는 정적 메서드를 만들어야합니다. 각 열거 형 엔트리를 반복하고 앞에서 언급 한 비공개 필드에 대한 getter와 함께 instanceof
을 사용하여이 작업을 수행합니다.
public enum Types {
FIRST(FirstSpecificClass.class), // line 2
SECOND(SecondSpecificClass.class); // line 3
private Class<AbstractClass> classType;
private Types(Class<AbstractClass> classType) {
this.classType = classType;
}
public Class<AbstractClass> getClassType() {
return this.classType;
}
public static Types fromTypeInstance(AbstractClass instance) {
for(Types t : Types.values())
if(instance instanceof t.getClassType()) return t; // line 17
return null;
}
}
내가 나중에 instanceof
검사에 반환하고 사용할 수 있도록 필드로 클래스 형식을 저장하는 방법을 오해하는 것 : 이것은 내 시도이다.
- (열거 라인 2) :이 코드는 여러 컴파일시에 오류가 발생되는 생성자
Types(Class<FirstSpecificClass>)
는 정의되지 - (열거 라인 3) : 생성자
Types(Class<SecondSpecificClass>)
는 정의 - (라인 인) 열거 형의 17 : 호환되지 않는 피연산자 유형
boolean
및Class<AbstractClass>
나는 보통 자바 프로그래머가 아니다, 나는 홍보를 할 수 있지만 내 제네릭의 이해와 instanceof
는, 기껏해야 퍼지입니다 OOP의 개념에 대한 회사의 이해. 이러한 오류를 해결하고 원하는 효과를 얻으려면 어떻게해야합니까?
aha! 고맙습니다! 이렇게하면 생성자의 유형 비 호환성을 해결할 수 있습니다. 오른쪽 인자가 실제로 Class 객체가 아니기 때문에 여전히 'instanceof' 검사에서 오류가 발생합니다 (분명히 "유형"이어야 함). instanceof 수표를 얻기 위해 어떻게 적절하게 캐스팅합니까? –
그리고 입력 한대로 해결했습니다. 고맙습니다! –
나는 그 오류도 알아 차렸고, 나는 나의 대답을 업데이트했다. – rgettman