如何包装子类的Collection对象?

时间:2017-04-28 16:19:32

标签: 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()方法。
  3. 所以这就是我所做的:

    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对象,所以getFirst()方法在Bucket试图在null上运行。

    我该如何解决这个问题?如何将发送到Class1的LinkedList连接到Bucket类中的LinkedList? 感谢您到目前为止的阅读。

1 个答案:

答案 0 :(得分:2)

是的,在您当前的代码中,linkedList类中的 Bucket并未指向任何对象,因此它会抛出java.lang.NullPointerException,因此要解决此问题,您可以按照以下方法:

基本上是LinkedList IS-A Collection,因此您可以简单地将collection个对象(从超类Class1)强制转换为linkedList个对象和{ {1}}第一个元素如下所示:

return