实现特定类的LinkedList,而不是泛型类型



我有一个简单的问题。

我正在使用我自己定义的链接节点定义一个类,作为一个嵌套类。

我只想把这个Node用于String类型的ArrayLists,而不是泛型类型。

我为泛型T定义了Node,即HNode,但我想在这个Node类上添加使用ArrayList方法的方法。例如,

    public void forward(int n) { //return boolean??
        HNode<T> targetNode;
        for(int i=0; i<n; i++) {
            targetNode = this._next;
        }
        targetNode._datum.add(this._datum.remove(this._datum.size()-1));
    }

在我的Node类中。

它不断给出警告,方法size()是未定义的类型T,这就是为什么我正在考虑改变类的定义为Node的ArrayList of String。

(第一个问题是:)这是正确的方法吗?还是有更好的方法?或者只要使用

就可以忽略警告

另一个问题是。我声明了变量targetNode,并在for循环中为它赋值。然而,它抛出一个警告,需要分配targetNode。

    public void forward(int n) { //return boolean??
        HNode<T> targetNode = this;
        for(int i=0; i<n; i++) {
            targetNode = targetNode._next;
        }
        targetNode._datum.add(this._datum.remove(this._datum.size()-1));

这可能是一个更好的选择吗?

谢谢! !

有更好的方法!

由于您希望使用Arraylist.size()方法,我建议将您的节点(和包含类)设置为Collection接口的类型。

Collection接口保证对象将实现.size()方法,这将消除编译错误。

Arraylist继承自Collection:
Collection --> AbstractList --> Arraylist

在你的类中使用Collection代替通用的T:

HNode<Collection> targetNode;

这将允许你的类处理所有实现Collection接口的类,这是一个广泛的类组。这保持了你的抽象,大大增加了代码的可重用性,而不是只将整个类提交到Arraylist

"我只想使用这个节点的节点数组列表的字符串,而不是一个泛型类型"

然后像这样创建你的类型,删除泛型,使用:HNode代替HNode<T>

创建一个类型为Arraylist<String>的字段。

为了能够使用List接口的方法,您只需要替换

HNode<T> 

HNode<List>

出现"targetNode需要被分配"的警告,因为如果n=0, for循环将不会被执行。这就是为什么targetNode可能没有被分配。这就是为什么你应该添加范围检查或者你可能会在这一行得到NullPointerException

targetNode._datum.add(this._datum.remove(this._datum.size()-1));

编辑:看起来你的最后一行在逻辑上是不正确的。Remove()方法返回操作的结果(布尔值),而不是被删除的对象本身。您需要在删除之前显式地获取此元素,或者只需将集合更改为LinkedList并调用removeLast()方法。

相关内容

  • 没有找到相关文章