Java Generics,返回什么而不是-1

时间:2018-03-28 14:32:06

标签: java generics

我正在使用SortedLinkedList或我的班级。我们必须将DoubleSortedLinkedList类更改为通用的SortedLinkedList类。我正在实现一个remove方法,该方法应该在列表中给出一个位置,并将删除给定的索引并返回该节点的值。

以下是给出的代码:

public double remove(int givenPosition)
{
    double dataToReturn;
    if (givenPosition < 0 || givenPosition >= manyNodes)
    {
        return -1;
    }
    if (givenPosition == 0)
    {
        dataToReturn = head.getData();
        head = head.getLink();
    }
    else
    {
        DoubleNode previous = head;
        for (int i = 0; i < givenPosition - 1; i++)
        {
            previous = previous.getLink();
        }
        DoubleNode oneToDelete = previous.getLink();
        dataToReturn = oneToDelete.getData();
        previous.setLink(oneToDelete.getLink());
        oneToDelete.setLink(null);
    }
    manyNodes--;
    return dataToReturn;
}

以下是我尝试将其更改为通用类

时的代码
public T remove(int givenPosition)
{
    T dataToReturn;
    if (givenPosition < 0 || givenPosition >= manyNodes)
    {
        return -1;
    }
    if (givenPosition == 0)
    {
        dataToReturn = head.getData();
        head = head.getLink();
    }
    else
    {
        Node<T> previous = head;
        for (int i = 0; i < givenPosition - 1; i++)
        {
            previous = previous.getLink();
        }
        Node<T> oneToDelete = previous.getLink();
        dataToReturn = oneToDelete.getData();
        previous.setLink(oneToDelete.getLink());
        oneToDelete.setLink(null);
    }
    manyNodes--;
    return dataToReturn;
}

我最大的问题是,当给定索引超出列表范围或者列表为空时,方法返回-1,但现在该类是泛型方法我无法转换为文字 - 1所以我很好奇我现在可以返回什么而不是-1。

1 个答案:

答案 0 :(得分:1)

作为意见:这取决于具体情况。我在一个更抽象的视图中考虑这个问题,而没有深入研究细节:为什么你会返回-1

说,在简化的,更一般的情况下,你有:

public double someOperation(int someArg) {
    if (certainConditionSatisfied()) {
       return -1;
    }
    // ...
}

现在必须将其转换为新界面

public T someOperation(int someArg) {
    if (certainConditionSatisfied()) {
       return ????
    }
  // ...
}

在这种情况下,我的一般答案是:

由于-1是一种特殊情况,因此在新的实施中,您可以自由地返回null

当然,使用此方法的相应代码也需要更改,以正确处理null而不是-1

但是,在您的特定情况下,我倾向于同意@JohnnyMopp,他在评论中建议抛出IndexOutOfBoundsException例外。