Since the method – removeRange(int startIndex, int ) is protected, we need to use it in a class extending ArrayList. Below is my code –
public class MyClass extends ArrayList<String> {
public static void main(String[] args) {
MyClass arrayList1 = new MyClass();
arrayList1.add("Zebra");
arrayList1.add("Giraffe");
arrayList1.add("Bison");
arrayList1.add("Hippo");
arrayList1.add("Elephant");
MyClass arrayList2 = (MyClass) arrayList1.clone();
MyClass arrayList3 = (MyClass) arrayList1.clone();
System.out.println(arrayList1);
System.out.println(arrayList2);
System.out.println(arrayList3);
arrayList1.removeRange(0, 3);
arrayList2.removeRange(3, 5);
arrayList3.removeRange(2, 4);
System.out.println(arrayList1);
System.out.println(arrayList2);
System.out.println(arrayList3);
}
}
Output –
[Zebra, Giraffe, Bison, Hippo, Elephant]
[Zebra, Giraffe, Bison, Hippo, Elephant]
[Zebra, Giraffe, Bison, Hippo, Elephant]
[Hippo, Elephant]
[Zebra, Giraffe, Bison]
[Zebra, Giraffe, Elephant]
Now to use type safety I need to write – MyClass<String> extends ArrayList<String> but doing so gives error in main method of String[] –
MyClass.This cannot be referenced from a static context
So how is it possible to use generics in removeRange method of ArrayList?
>Solution :
The way to make MyClass able to store objects of any type, not just String is to introduce a type parameter T which fills in for the type. The declaration will then be
public class MyClass<T> extends ArrayList<T>
But then, you have to specify what T is when you declare a MyClass variable. This means you’ll need to change your variable declarations and initialisations to things like
MyClass<String> arrayList1 = new MyClass<>();
which tells the compiler what type to use in place of T.