Java 警告:类型参数E在使用内部类时隐藏类型E
我在写一个堆栈,一个是静态节点,另一个是非静态节点Java 警告:类型参数E在使用内部类时隐藏类型E,java,generics,static,Java,Generics,Static,我在写一个堆栈,一个是静态节点,另一个是非静态节点 public class Stack<E> implements Iterable<E> { private int N; private Node<E> first; private static class Node<E> // This works fine. { private E item; private Node
public class Stack<E> implements Iterable<E>
{
private int N;
private Node<E> first;
private static class Node<E> // This works fine.
{
private E item;
private Node<E> next;
}
}
公共类堆栈实现Iterable
{
私人int N;
私有节点优先;
私有静态类节点//这工作正常。
{
私人电子物品;
私有节点下一步;
}
}
但是,当我试图使节点非静态时,它会给我以下警告:“类型参数E正在隐藏类型E”
公共类堆栈实现Iterable
{
私人int N;
私有节点优先;
私有类节点//显示警告。
{
私人电子物品;
私有节点下一步;
}
}
一点理解,我已经告诉我,由于静态memeber是类的成员,所以它不会给我警告,但当我将其设置为非静态时,它属于实例。但这不是一个清晰的想法 它警告您,您正在范围中使用已定义的通用参数名称
E
。更改节点的通用参数名称将是解决警告的一种方法:
public class Stack<E> implements Iterable<E>
{
private int N;
private Node<E> first;
private class Node<T>
{
private T item;
private Node<T> next;
}
}
请注意,这是因为节点
不是静态的,因此它引用了外部堆栈
对象,因此必须定义E
。如果节点
是静态的,那么它与外部堆栈
类型没有真正的关系,只是有效地处于其词法范围内。谢谢您的回答。因此,当节点是静态的时,它不会向我显示该错误,因为它属于该类?它正确吗?您还可以详细说明为什么我不需要将节点设置为通用的吗?@Vwin我添加了一个解释。很好。谢谢:)为什么说“它没有真正的关系”@Vwin如果它是一个静态类,那么实例是独立的;如果不是静态类,则实例只能与外部类的实例建立关系。
public class Stack<E> implements Iterable<E>
{
private int N;
private Node<E> first;
private class Node<T>
{
private T item;
private Node<T> next;
}
}
public class Stack<E> implements Iterable<E>
{
private int N;
private Node first;
private class Node
{
private E item;
private Node next;
}
}