gpt4 book ai didi

java - 如何修复非静态变量 this 无法从具有内部类的静态类引用?

转载 作者:行者123 更新时间:2023-12-01 23:11:03 24 4
gpt4 key购买 nike

我编写以下代码纯粹是为了好玩,可能仍然存在错误,或者甚至可能根本不起作用:

public class PrimeGenerator implements PrimitiveIterator.OfInt {
private final static IntNode HEAD_NODE = new IntNode(2); //error here

private IntNode lastNode = HEAD_NODE;
private int current = 0;

@Override
public boolean hasNext() {
return true;
}
@Override
public int nextInt() {
if (lastNode.value == current) {
lastNode = lastNode.next;
return lastNode.value;
}
while (true) {
current++;
if (isPrime(current)) {
break;
}
}
appendNode(current);
return current;
}

private boolean isPrime(final int number) {
PrimeGenerator primeGenerator = new PrimeGenerator();
int prime = 0;
while (prime < number) {
prime = primeGenerator.nextInt();
if (number % prime == 0) {
return false;
}
}
return true;
}

private void appendNode(final int value) {
couple(lastNode, new IntNode(value));
}

private void couple(final IntNode first, final IntNode second) {
first.next = second;
second.previous = first;
}

private class IntNode {
public final int value;

public IntNode previous;
public IntNode next;

public IntNode(final int value) {
this.value = value;
}
}
}

对于不了解 Java 8 的人,不用担心,PrimitiveIterator.OfInt ,与 Iterator<Integer> 作用相同.

我遇到的问题在第二行,即:

private final static IntNode HEAD_NODE = new IntNode(2);

我收到警告:non-static variable this cannot be referenced from a static class .

我已经搜索过,应该可以通过 IntNode 来修复它不依赖PrimeGenerator ,通过将其移动到自己的公共(public)类中。

但是,如果我不想要怎么办IntNode被公众知晓?

最佳答案

您应该将您的 IntNode 类设为 static

如果不这样做,这意味着如果外围类的实例不存在,IntNode 实例就无法存在。

简而言之,您不能编写(当然,前提是 IntNodepublic):

new PrimeGenerator.IntNode(whatever);

但是您必须创建一个新的 PrimeGenerator,例如下面的 generator,并写入:

generator.new IntNode(whatever);

但是,您在这里尝试创建一个 IntNode 作为 PrimeGenerator 的类变量。这不起作用,因为您还没有 PrimeGenerator 实例。

关于java - 如何修复非静态变量 this 无法从具有内部类的静态类引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21968212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com