
public class Main {
public static void main(String[] args) {
PriorityQueue<Position> pq = new PriorityQueue<>();
pq.add(new Position(1));
}
public class Position implements Comparable<Position> {
private int pos;
private int velocity;
private int time;
public Position (int k) {
this(0, k, 0);
}
public Position(int pos, int velocity, int time) {
this.pos = pos;
this.velocity = velocity;
this.time = time;
}
@Override
public int compareTo(Position o) {
return o.pos - this.pos; // 내림차순
}
}
}
Position 클래스를 Main 클래스 안에 정의하여 Position 객체를 main 메소드에서 직접 생성하려고 했으나, non-static variable this cannot be referenced from a static context 오류가 발생했습니다.
이 오류를 해결하기 위해 Position 클래스를 Main 클래스 외부에 독립적으로 선언합니다. 이렇게 하면 Position 클래스는 Main 클래스의 인스턴스에 묶이지 않게 되어 오류가 발생하지 않습니다.
public class Main {
public static void main(String[] args) {
PriorityQueue<Position> pq = new PriorityQueue<>();
pq.add(new Position(1));
}
}
class Position implements Comparable<Position> {
private int pos;
private int velocity;
private int time;
public Position (int k) {
this(0, k, 0);
}
public Position(int pos, int velocity, int time) {
this.pos = pos;
this.velocity = velocity;
this.time = time;
}
@Override
public int compareTo(Position o) {
return o.pos - this.pos; // 내림차순
}
}
이때 Position 클래스의 접근 제어자는 public으로 선언하면 안 됩니다. 하나의 소스 파일에는 반드시 하나의 public 클래스만 존재해야 하기 때문입니다.