문제

나는 많은 성공을 거두지 않고 Arraylist 클래스를 확장하려고 노력했습니다. 확장하고 매개 변수화 할 수 있습니다.

그래서 일반적으로 당신은 같은 것을 가지고 있습니다

ArrayList<SomeObject> list = new ArrayList<SomeObject>();

원해요

MyList<SomeObject> list = new MyList<SomeObject>();

ArrayList를 확장하는 것은 작동하지 않습니다.

public class MyList extends ArrayList ...

내가 그것을 사용하려고 할 때 나는 오류를 얻는다

유형 마이리스트는 일반적이지 않습니다. 인수로 매개 변수화 될 수 없습니다u003CSomeObject>

나는 변형을 시도했다

public class MyList extends ArrayList<Object>
public class MyList<SubObject> extends ArrayList<Object>

성공하지 못한 상태에서 클래스 이름 뒤에 서브 버젝트를 사용하면 작동하는 것처럼 보이지만 어떤 이유로 든 하위 목체 클래스의 방법을 숨 깁니다.

이 일을 올바르게하는 방법에 대한 모든 생각이나 제안에 감사드립니다.

도움이 되었습니까?

해결책

당신은 다음에 유형을 지정해야합니다 ArrayList의 유형 매개 변수. 일반 유형 매개 변수의 경우 T 상당히 일반적입니다. 컴파일러는 무엇을 알지 못하기 때문에 T , 당신은 유형 매개 변수를 추가해야합니다. MyList 그것은 유형을 통과시킬 수 있습니다. 따라서, 당신은 다음을 얻을 수 있습니다.

public class MyList<T> extends ArrayList<T>

또한 구현을 고려할 수 있습니다 List 그리고 위임 ArrayList, 상속하기보다는 ArrayList. "클래스 상속에 대한 대상 구성을 선호합니다. [디자인 패턴 pg. 20] ""

다른 팁

public class MyList<T> 
    extends ArrayList<T>
{
}

MyList<SomeObject> list = new MyList<SomeObject>();

또는

public class MyList
    extends ArrayList<SomeObject>
{
}

MyList list = new MyList();

ArrayList를 확장해서는 안됩니다 AbstractList 대신에:

public class MyList<T> extends AbstractList<T> {
    public int size() {...}
    public T get(int index) {...}
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top