java - 如何包装子类的Collection对象?

标签 java design-patterns

我正在构建一个数组,其中数组中的每个元素都是字符串的 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 对象。我希望这个类满足两个要求:

  1. 使用 Class1 实现来实现集合方法(添加、删除等)
  2. 拥有自己的其他方法,例如以下 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/

相关文章:

java - 为 new Object(); 保留多少内存空间;

java - 准备语句: executeUpdate insert wrongly the raw

java - 如何将 MouseListener 添加到 JList 项目?

java - Java中通配符捕获,无法调用方法

.net - 存储和评估规则表达式的数据库设计

java - 复制和增强对象的最佳实践(设计模式)

Java Enum 找不到符号错误

java - 将 Maven 项目及其依赖项添加到我的 Eclipse 项目中,最佳工作流程

c# - 这种设计模式的名称是什么(通过委托(delegate)向合作者公开私有(private)方法)?

java - 避免多重if的设计模式