我正在构建一个数组,其中数组中的每个元素都是字符串的 LinkedList。我必须使用以下实现:
构建一个包装 LinkedList 对象的类(并扩展给定的类),并使数组中的每个元素都是此类的实例。 我需要扩展以下类(我无法更改,并且必须使用):
public Class1{
java.util.Collection<java.lang.String> collection;
Class1(java.util.Collection<java.lang.String> collection){
this.collection = collection; }
public void add(String str) {
collection.add(str); }
Class1 还有一些与 Collection 相关的方法(删除等)。我想创建一个扩展 Class1 的类,并包装一个 LinkedList 对象。我希望这个类满足两个要求:
- 使用 Class1 实现来实现集合方法(添加、删除等)
- 拥有自己的其他方法,例如以下 getFirst() 方法。
这就是我所做的:
public class Bucket extends Class1 {
LinkedList<String> linkedList;
Bucket(){
super(new LinkedList<String>()); }
public String getFirst(){
linkedList.getFirst(); } }
我有一个主类尝试运行以下代码
Bucket bucket = new Bucket();
bucket.add("5");
bucket.getFirst();
这属于bucket.getFirst()行,因为显然Bucket类中的linkedList为null,它不是我发送给Class1的LinkedList对象,所以Bucket中的getFirst()方法试图对 null 进行操作。
我该如何解决这个问题?如何将发送到 Class1 的 LinkedList 连接到 Bucket 类中的 LinkedList? 感谢您到目前为止的阅读。
最佳答案
是的,在您当前的代码中,Bucket
类中的linkedList
没有指向任何对象,因此它会抛出java.lang.Error异常。 lang.NullPointerException
,因此解决该问题可以按照以下方法:
基本上,一个LinkedList IS-A Collection ,因此您可以简单地将 collection
对象(来自父类(super class) Class1
)转换为 linkedList
对象并返回
第一个元素如下图:
public class Bucket extends Class1 {
LinkedList<String> linkedList;
public Bucket(){
super(new LinkedList<String>());
//now typecast and assign collection to linkedList
linkedList = (LinkedList<String>)collection;
}
public String getFirst() {
return linkedList.getFirst();
}
}
关于java - 如何包装子类的Collection对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43684750/