【发布时间】:2014-02-23 12:30:20
【问题描述】:
我编写以下代码纯粹是为了好玩,可能仍然存在错误,或者它甚至可能根本不起作用:
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 来修复,方法是将其移动到自己的公共类中。
但是,如果我不希望 IntNode 被公开,我该怎么办?
【问题讨论】:
-
将其设为
static类? -
@OliCharlesworth 这不是捍卫能够实例化它的想法吗?或者它与内部类的工作方式不同,我仍然对此感到困惑。
标签: java class static inner-classes java-8