我正在尝试创建一个扩展 ArrayList 的类,添加下面定义的两个方法。 但是,新的 BetterArrayList 类无法正确从其构造函数方法读取参数,以从传递的 ArrayList<> 对象创建扩展对象。 将 ArrayList<> 对象传递给此类并将该对象的内容分配给类成员变量的正确方法是什么?
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class BetterArrayList<E> extends ArrayList<E> {
private int size;
private ArrayList<E> myArray = new ArrayList<>(size);
public BetterArrayList(ArrayList<E> passArr){
System.out.println("New BetterArrayList");
this.size = passArr.toArray().length;
this.myArray = passArr;
myArray.addAll(passArr);
}
public E pop() {
return remove(this.size() - 1);
}
public void print() {
myArray.forEach(elem ->{
System.out.println(elem);
});
}
/**
*
*/
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
// int[] ints = new int[] {1,2,3,4,5};
Integer[] ints = new Integer[] {1,2,3,4,5};
System.out.println(ints.length);
ArrayList<Integer> arrs = new ArrayList<Integer>(Arrays.asList(ints));
System.out.println(arrs.size());
BetterArrayList<Integer> BetterArray = new BetterArrayList<Integer>(arrs);
System.out.println(BetterArray.size());
BetterArray.pop();
BetterArray.print();
}
}
最佳答案
尝试同时使用组合和继承会让您感到困惑。
简单地说,组合就是您尝试将 ArrayList
作为类字段放入并通过访问该字段来使用它。
继承是您尝试使用extends
(在本例中)的地方。
我修改了您的代码以消除组合并简单地使用extends
(我稍微更改了测试print
语句以使其清晰):
public class BetterArrayList<E> extends ArrayList<E> {
private static final long serialVersionUID = 1L;
public BetterArrayList(ArrayList<E> passArr) {
this.addAll(passArr);
}
public E pop() {
return this.remove(this.size() - 1);
}
public void print() {
this.forEach(elem ->{
System.out.println(elem);
});
}
public static void main(String[] args) {
// int[] ints = new int[] {1,2,3,4,5};
Integer[] ints = new Integer[] {1,2,3,4,5};
ArrayList<Integer> arrs = new ArrayList<>(Arrays.asList(ints));
BetterArrayList<Integer> betterArr = new BetterArrayList<>(arrs);
System.out.println("ArrayList: " + arrs);
System.out.println("BetterArrayList: " + betterArr);
betterArr.pop();
System.out.println("BetterArrayList After Pop: " + betterArr);
}
}
输出:
ArrayList: [1, 2, 3, 4, 5]
BetterArrayList: [1, 2, 3, 4, 5]
BetterArrayList After Pop: [1, 2, 3, 4]
旁注:
我修改了您用于 BetterArrayList
实例的名称,以使用正确的 Java 命名约定,即 withCasingLikeThis
作为变量名称,而不是 CasingLikeThis
.
此外,组合也可能是一种完全有效的方法,但尽量不要在同一个类上同时使用这两种方法。
区分它们的提示:
Composition represents a has a relationship.
Inheritance represents a is a relationship.
关于java - 将 ArrayList<> 对象传递给扩展 ArrayList 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60328351/