Java 嵌套 class 无法识别自身的实例
Java nested class does not recognize instance of itself
我正在尝试创建一个链表,但由于某些原因,Link<E>
class 并不是 'recognize'(缺少更好的词)自身的一个实例。更具体地说,VS 代码告诉我:The method setnext(Problem<E>.Link<E>) is undefined for the type Problem<E>.Link<E>
。我相信这意味着它将 linkToAdd 视为 Problem<E>.Link<E>
的一个实例,并将其自身视为 Link<E>
的一个实例。但我可能误会了。
谁能告诉我我做错了什么?
这里是仍然会产生错误的 class 的最小化版本:
public class Problem<E>
{
public class Link<E>
{
private E element;
private Link<E> next;
Link(E element, Link<E> next) {
this.element = element;
this.next = next;
}
void setNext(Link<E> next) {
this.next = next;
}
}
private Link<E> start;
public Problem() {
start = new Link<E>(null, null);
}
public boolean add(E element) {
Link<E> linkToAdd = new Link<E>(element, null);
this.start.setnext(linkToAdd);
}
}
编辑:我已经为问题 class 添加了构造函数。没有 main(String[] args) ,因为这是学校练习的一部分,我只得到了 class 的文档,我希望根据它创建 said class 。我实际上还没有在任何地方使用这个 class。
编辑 #2:这是终端中 运行 java Problem.java
给出的错误:
Problem.java:27: error: cannot find symbol
this.start.setnext(linkToAdd);
^
symbol: method setnext(Problem<E>.Link<E>)
location: variable start of type Problem<E>.Link<E>
where E is a type-variable:
E extends Object declared in class Problem
1 error
error: compilation failed
无法识别嵌套的 class,因为您需要先创建一个 Problem
类型的对象来实例化 Link
对象。您需要设置嵌套 class static
才能使 Link<E> start = new Link(null)
正常工作。
public class Bar {
public class Foo {
int a, b;
void doSomething() {
System.out.println(a + " " + b);
}
}
public static void main(String[] args) {
Bar bar = new Bar();
Foo foo = bar.new Foo();
}
}
由于您没有提供客户端(驱动程序)代码,我假设您没有正确实例化 Link。请查看有效示例。
public class Problem<E> {
class Link<E> {
private E element;
private Link<E> next = null;
public Link(E element) {
this.element = element;
}
public void setnext(Link<E> next) {
this.next = next;
}
}
Link<E> start = new Link(null);
public void add(E element) {
Link<E> linkToAdd = new Link(element);
start.setnext(linkToAdd);
}
public static void main(String[] args) {
Problem<Integer> problem = new Problem<>();
Problem<Integer>.Link<Integer> link = problem.new Link<Integer>(1);
problem.add(2);
}
}
这只是一个错字: setNext() 在 Link<E>
class 定义中大写,但在我使用 setnext 的 add() 方法中没有大写().
回想起来,这实际上是 vs code 一直试图告诉我的:
The method setnext(Problem<E>.Link<E>) is undefined for the type Problem<E>.Link<E>
然而,我对到处使用 Link<E>
感到困惑,并且通过分享我对错误的错误解释似乎让我们其他人感到困惑。感谢大家的帮助!
我正在尝试创建一个链表,但由于某些原因,Link<E>
class 并不是 'recognize'(缺少更好的词)自身的一个实例。更具体地说,VS 代码告诉我:The method setnext(Problem<E>.Link<E>) is undefined for the type Problem<E>.Link<E>
。我相信这意味着它将 linkToAdd 视为 Problem<E>.Link<E>
的一个实例,并将其自身视为 Link<E>
的一个实例。但我可能误会了。
谁能告诉我我做错了什么?
这里是仍然会产生错误的 class 的最小化版本:
public class Problem<E>
{
public class Link<E>
{
private E element;
private Link<E> next;
Link(E element, Link<E> next) {
this.element = element;
this.next = next;
}
void setNext(Link<E> next) {
this.next = next;
}
}
private Link<E> start;
public Problem() {
start = new Link<E>(null, null);
}
public boolean add(E element) {
Link<E> linkToAdd = new Link<E>(element, null);
this.start.setnext(linkToAdd);
}
}
编辑:我已经为问题 class 添加了构造函数。没有 main(String[] args) ,因为这是学校练习的一部分,我只得到了 class 的文档,我希望根据它创建 said class 。我实际上还没有在任何地方使用这个 class。
编辑 #2:这是终端中 运行 java Problem.java
给出的错误:
Problem.java:27: error: cannot find symbol
this.start.setnext(linkToAdd);
^
symbol: method setnext(Problem<E>.Link<E>)
location: variable start of type Problem<E>.Link<E>
where E is a type-variable:
E extends Object declared in class Problem
1 error
error: compilation failed
无法识别嵌套的 class,因为您需要先创建一个 Problem
类型的对象来实例化 Link
对象。您需要设置嵌套 class static
才能使 Link<E> start = new Link(null)
正常工作。
public class Bar {
public class Foo {
int a, b;
void doSomething() {
System.out.println(a + " " + b);
}
}
public static void main(String[] args) {
Bar bar = new Bar();
Foo foo = bar.new Foo();
}
}
由于您没有提供客户端(驱动程序)代码,我假设您没有正确实例化 Link。请查看有效示例。
public class Problem<E> {
class Link<E> {
private E element;
private Link<E> next = null;
public Link(E element) {
this.element = element;
}
public void setnext(Link<E> next) {
this.next = next;
}
}
Link<E> start = new Link(null);
public void add(E element) {
Link<E> linkToAdd = new Link(element);
start.setnext(linkToAdd);
}
public static void main(String[] args) {
Problem<Integer> problem = new Problem<>();
Problem<Integer>.Link<Integer> link = problem.new Link<Integer>(1);
problem.add(2);
}
}
这只是一个错字: setNext() 在 Link<E>
class 定义中大写,但在我使用 setnext 的 add() 方法中没有大写().
回想起来,这实际上是 vs code 一直试图告诉我的:
The method setnext(Problem<E>.Link<E>) is undefined for the type Problem<E>.Link<E>
然而,我对到处使用 Link<E>
感到困惑,并且通过分享我对错误的错误解释似乎让我们其他人感到困惑。感谢大家的帮助!