과 트릭이 필요 이건 내 코드입니다 :객체 작성자
public interface InterfaceA<J>{
// …
}
public interface InterfaceB extends InterfaceA<String> {
// …
}
public interface InterfaceC extends InterfaceA<Long>{
// …
}
public class Creator<J, I extends InterfaceA<J>> {}
public abstract class Base<J, J1> implements InterfaceA<J> {
protected Creator<J, J1> creator;
protected Base() {
creator=ObjectCreator.createCreator();
}
}
public class Extension1 extends Base<Integer> implements InterfaceB {
// …
}
public class Extension2 extends Base<Double> implements InterfaceC {
// …
}
내가 Creator<Double, interfaceC>
을 가지고 Creator<Integer, InterfaceB>
및 Extension2
을 가지고 Extension1
를 원한다. 패턴을 봐? Creator<T1, T2>
여기에서 T1
은 직접적인 부모의 유형이고 T2
은 상기 클래스에 의해 구현 된 인터페이스입니다. 이 일을 할 수있는 방법이 있습니까? 아무도 ObjectCreator.createCreator()
코드를 말할 수 있습니까?
는 지금 내 코드는 다음과 같습니다 : 내 모든 코드를 통해 오류를 가지고
public class ObjectCreator {
public static <J, I extends InterfaceA<J>> Creator<J, I> createCreator() {
return new Creator();
}
}
. 나는 정말로 혼란 스럽다. 내가 여기서 무엇을 놓치고 있니? 중요성의 특정한 순서에
package scratch;
interface InterfaceA<J> {
// …
}
interface InterfaceB extends InterfaceA<String> {
// …
}
interface InterfaceC extends InterfaceA<Long> {
// …
}
class Creator<J, I extends InterfaceA<J>> {
}
abstract class Base<J, I extends InterfaceA<J>> {
protected Creator<J, I> creator;
protected Base(Class<J> jClass, Class<I> iClass) {
creator = ObjectCreator.createCreator(jClass, iClass);
}
}
class Extension1 extends Base<String, InterfaceB> implements InterfaceB {
protected Extension1() {
super(String.class, InterfaceB.class);
}
}
class Extension2 extends Base<Long, InterfaceC> implements InterfaceC {
protected Extension2() {
super(Long.class, InterfaceC.class);
}
}
class ObjectCreator {
public static <J, I extends InterfaceA<J>> Creator<J, I>
createCreator(Class<J> jClass, Class<I> iClass) {
return new Creator();
}
}
:
처음에는이 코드가 구문 상 올바른가요? 왜냐하면 나는 약간의 키워드가 코드를 컴파일하기 위해 빠져 있다고 생각하기 때문이다. – chaosguru
SO에 업로드하기 전에 코드를 올바르게 확인하십시오. 제네릭은 제대로 사용되지 않습니다. 선 보호 된 창조자 창조자; 의미가 없으며 코드가 올바른 구문을 필요로합니다. –
chaosguru
예, 죄송합니다. 여는 대괄호로 "less than"을 모두 변경하기 위해 편집 할 때 실수로 삭제해야합니다. –