removeRange() 메서드는 어떻게 사용할 수 있나요?
VE
arraylist 내에 보면 removerange메써드 있습니다. 허나 문제는 이 메써드가 protected 된 상태라서
외부클래스에서 접근이 불가능 합니다.
해서 이를 사용하고 자 한다면... 어떻게 해야 할까요? 이너 클래스를 이용해야 하나요?
public class removerange extends arraylist {
protected void removerange(int a, int b){
super.removerange(a, b); 여기서 에러가 발생합니다.
}
public void test(){
arraylist r = new arraylist();
r.add(100);
r.add(200);
r.add(300);
r.add(400);
r.add(500);
for(int i=0; ir.size();i++){
system.out.println(r.get(i));
}
removerange(1,3); 여기서 호출시...
for(int i=0; ir.size();i++){
system.out.println(r.get(i));
}
}
public static void main(string[] args) {
removerange rr = new removerange();
rr.test();
}
}
저상태로 돌리면 arrayindexoutofboundsexception 가 발생합니다.
상위로 돌려줄때 해당 오브젝트를 같이 보내야 할꺼 같은뎅...ㅡㅠ
저러식이 아닌 메인 클래스 내에서 돌리면 아무런 문제가 없이 사용가능합니다.
즉, 메인에서는 removerange메써드를 오버라이딩 필요없이 바로 사용이 가능하나,
저러식으로 할때는 removerange()메써드 자체가 보이지 않습니다.ㅡ.ㅡ
어떻게 해야 할까요? 이너클래스 사용하려고 해도 비슷한거 같은데...
아시는분 답변좀 부탁드립니다.
-
초코홀릭
그리고 혹시
protected void removeRange(int a, int b)
이 함수를 다른 class에서 사용을 하실려고 하신거라면
protected void removeRange(ArrrayList targetArrayList, int a, int b)
{
targetArrayList.removeRange(a, b);
}
라고 하시면 될 듯 합니다..
근데.. ArrayList를 왜 상속 받으셨는지 모르겠네요.. -
남자
음.. 우선 해당 에러가 발생하는 이유는 님이 하실려는 의도와 코딩이 다르기 때문인것 같습니다.
super.removeRange(a, b);
이 부분에서 super라고 하시면 extends로 상속받은 ArrayLsit의 엘리먼트를 삭제하는 건데.. 상속 받으신 ArrayList에 엘리먼트가 있는지 먼저 확인을 해보셔야 할거 같습니다.
확인 방법은 super.size()로 크기를 알 수 있을 것 같습니다.
그리고 만약 r의 엘리먼트를 삭제 하실려고