Java 如何检查它是否';在迭代器中强制转换到T安全吗?

Java 如何检查它是否';在迭代器中强制转换到T安全吗?,java,generics,iterator,Java,Generics,Iterator,我想用迭代器实现一个自定义列表,以便自己更好地理解它,但是我遇到了泛型类型的问题,这是我第一次使用自己的泛型类型。 这是我们班的重要部分 public class MyList<T> implements Iterable<T> { // Unrelated code @Override public Iterator<T> iterator() { return new Iterator<T>() { pri

我想用迭代器实现一个自定义列表,以便自己更好地理解它,但是我遇到了泛型类型的问题,这是我第一次使用自己的泛型类型。 这是我们班的重要部分

public class MyList<T> implements Iterable<T> 
{

// Unrelated code

@Override
public Iterator<T> iterator()
{
    return new Iterator<T>()
    {
        private Node position = firstNode;

        public boolean hasNext()
        {
            return position.getNext() != null;
        }

        public T next()
        {
            String current = "";
            if (this.hasNext())
            {
                current = position.getData();
                position = position.getNext();
            }
            return (T) current;
但Eclipse给出了一个错误:“无法对类型参数T执行instanceof check。请改用它的erasure对象,因为更多的泛型类型信息将在运行时被擦除”

如果不使用@SupersSwarnings,我该如何消除警告

        }

        public void remove()
        {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    };
}

    //unrelated code
}

instanceof
是一个运行时检查,因此由于类型擦除,编译器无法知道是否可以执行该检查

同样地,在你的cast示例中,如果你不知道你的程序将使用什么类型,你怎么知道你可以执行这个cast呢?这可能会导致
ClassCastException

编辑: 根据评论和你的最后一个问题

如果不使用@SupersSwarnings,我该如何消除警告

        }

        public void remove()
        {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    };
}

    //unrelated code
}
嗯,您的
当前
是一个
字符串
。不要将其强制转换为未知类型。
希望它能提供更多帮助和解释。

通过泛化
节点
,您可以摆脱所有的强制转换和
实例

比如:

class Node<T> {
  private Node<T> next;
  private T data;

  public Node<T> getNext () {
    return next;
  }

  public T getData () {
    return data;
  }
}
类节点{
私有节点下一步;
私有T数据;
公共节点getNext(){
下一步返回;
}
公共T getData(){
返回数据;
}
}

如果字符串类型总是字符串,为什么要将其设置为泛型?您无法安全地将字符串转换为T!您可能需要
Node
,getter返回
T
您对使用@SuppressWarnings有什么反对意见?这就是它的目的。这不是一个答案——它应该是一个评论。@OldCurmudgeon为什么它不是一个答案?说真的,也许我太新了,你在解释问题是什么,而不是回答问题。不过,我很可能错了——毕竟这只是一个评论。:)也许你是对的,我改进了我的答案,现在好点了吗?谢谢。@OldCurmudgeon就像一个老顽皮鬼对另一个老顽皮鬼一样,在我看来,解释问题是什么确实回答了问题。例如,不仅仅是提供一些工作代码,我还需要大量的存储,因为我的节点不是那么简单,但是现在我有0个警告(OCD Much:p),谢谢!