2024.11.02. Today I Learned

polar·2024년 11월 2일

2024년 11월 TIL

목록 보기
1/28
post-thumbnail

배운점

  1. 하나의 소스 파일에는 반드시 하나의 public 클래스만 존재해야 한다.

문제 상황

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 클래스만 존재해야 하기 때문입니다.

참고자료

자바로 백준 풀 때의 팁 및 주의점

하나의 파일에 여러 클래스 작성하기

0개의 댓글