Java에서 인스턴스를 통한 정적 메서드 호출
Java에서는 인스턴스를 통해 정적 메서드를 호출하는 것이 가능하며, 이는 컴파일러를 발생시키는 동작입니다. 경고는 있지만 오류는 아닙니다.
왜 오류가 아닌가요? 오류?
Java 디자인 팀은 처음에 이 동작을 허용하여 실수를 범했습니다. 명시적으로 승인되지는 않았지만 호환성을 위해 유지되었습니다. 혼란스러운 코드로 이어질 수 있지만 본질적으로 잘못된 것은 아닙니다.
다형성의 환상
인스턴스를 통해 정적 메서드를 호출하는 것이 오해를 불러일으킬 수 있는 이유 중 하나는 다음과 같습니다. 다형성의 인상을 준다는 것입니다. 진정한 다형성에서는 호출되는 메서드가 개체 유형에 따라 달라집니다. 그러나 정적 메서드는 다형성이 아닙니다. 항상 선언된 클래스에 바인딩됩니다.
다음 예를 고려하세요.
Thread thread = new Thread(); int activeCount = thread.activeCount();
activeCount가 Thread 클래스의 정적 메서드이기 때문에 이 코드는 컴파일되지만 경고를 생성합니다. . 컴파일러는 호출에 사용해야 하는 Thread 클래스의 인스턴스를 결정할 수 없습니다. 이러한 유형의 코드는 혼란과 잠재적 오류를 초래할 수 있습니다.
대체 접근 방식
C#과 같은 언어에서는 인스턴스를 통해 정적 메서드를 호출하는 것이 허용되지 않습니다. 대신 올바른 접근 방식은 아래와 같이 클래스 이름을 사용하여 정적 메서드를 호출하는 것입니다.
public class Abc { public void Test() { // Static methods in other classes are available via // the class name Foo.Bar(); } }
결론
정적 메서드를 호출하는 것은 기술적으로 허용되지만 Java의 인스턴스를 통해 잘못된 코드를 초래할 수 있는 나쁜 습관으로 간주됩니다. 개발자는 이 동작을 피하고 생성된 컴파일러 경고를 오류로 처리해야 합니다. 최신 IDE에서는 코드 명확성과 정확성을 보장하기 위해 이러한 호출을 오류로 처리하도록 컴파일러를 구성하는 것이 좋습니다.
위 내용은 Java가 인스턴스를 통한 정적 메소드 호출을 허용하는 이유는 무엇이며 이를 피해야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!