0

추상 클래스를 구현하는 데 문제가 있습니다. AbstractClass에서 List를 매개 변수로 사용하여 Abstract Method를 선언하려고합니다. 그러나 구현할 때 추상 확장자를 올바르게 구현하지 못했다는 컴파일 오류가 발생합니다. 나는 그것을 구현할 때마다 Java 추상 메서드 매개 변수 유형

public abstract class MyAbstractClass<T> { 
    abstract protected List<T> MyMethod(List<String> list); 
} 

public class MyClass<MyObject> extends MyAbstractClass { 
    @Override 
    protected List<MyObject> MyMethod(List<String> list){ 
     //Do Stuff 
    } 
} 

는 자동적으로 그것은 List<String> 단지 List 있습니다. 이유가 있을까요? 감사. 난 당신이 MyClass이 형식 매개 변수 T에 대한 MyObject을 사용하는 말을하는
public class MyClass extends MyAbstractClass<MyObject> 

말을 의미 생각

public class MyClass extends MyAbstractClass<MyObject> { 
    @Override 
    protected List<MyObject> MyMethod(List<String> list){ 
     //Do Stuff 
    } 

} 
+2

"구현하는 방법"을 알려주십시오. 난 네가 원시 타입을 사용하고있는 것 같아. –

+1

아마도 MyClass extends MyAbstractClass 공용 클래스를 원할 것입니다. { –

답변

1

나는 당신이 원하는 것은 이것이다 생각합니다.

MyClass에는 type 매개 변수가 있으며 이는 기본 클래스의 유형 매개 변수 T과 관계가 없습니다. 따라서이 경우 MyAbstractClass 참조는 MyClass 인스턴스를 가리킬 수 있으며이 참조의 사용자는 MyClass이되어야하므로 일 필요가 없도록 MyClass이라는 것을 알 필요가 없습니다.

extends MyAbstractClass<MyObject> 

+0

: P 예. MyObject와는 아무런 관련이없는 매개 변수에 대해 불평하면서 문제가 해결 될 것이라고 생각하지 않았습니다. – CovaDax

1

:

0

변화는 이클립스에서 그것을 테스트하고 작동합니다.

슈퍼 클래스는 그 유형을 지정하면 반환하려는 유형 만 알 수 있기 때문에 논리로 보입니다. 그리고 그것을 유형화하지 않으면 일반화해야합니다.

0

문제는, 그래서 클래스 public class MyClass extends MyAbstractClass<MyObject> { @Override protected List<MyObject> MyMethod(List<String> list) { // do stuff } }

  • 당신은 그냥 일반으로 MyObject를 사용하고이처럼 이름

    두 가지 경우

    1. 을 MyObject입니다 응답하고 모호함이있다 동일한 유형이 다음과 같이 부모에게 전달됩니다.

      public class MyClass<MyObject> extends MyAbstractClass<MyObject> { @Override protected List<MyObject> MyMethod(List<String> list) { // do stuff } }