gpt4 book ai didi

java - 将 ArrayList<> 对象传递给扩展 ArrayList 的类

转载 作者:行者123 更新时间:2023-12-04 10:32:58 24 4
gpt4 key购买 nike

我正在尝试创建一个扩展 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 的地方。 in 作为类字段并通过访问该字段来使用它。
继承是您尝试使用的地方 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com