답변:
다음은 몇 가지 이유이며, 자신의 환경 설정에 따라 다소 매력적일 수 있습니다.
단순히 "구문 설탕"으로 할인하지 마십시오. 무언가가 단지 구문 설탕 이라고 말할 수도 있지만 , 커피 또는 차 마시는 사람뿐만 아니라 프로그래머로서 인생을 달콤하게 만드는 것은 모든 설탕에 달려 있습니다.
싱글 톤-모든 스칼라 object
는 본질적으로 싱글 톤입니다. Java 세계에서 사람들은 모든 종류의 다른 방식으로 싱글 톤을 구현하고 있으며 구현에서 실수를 저 지르지 않는 경우가 많으므로 Scala에서와 같이 간단한 오류를 만들 수 없습니다. object
대신 쓰는 것이 class
싱글 톤이되고 끝났습니다.
정적 메소드에 액세스 : Java의 정적 메소드는 오브젝트에서 액세스 할 수 있습니다. 예를 들어, C
정적 메서드 f
와 c
유형 의 객체 가있는 클래스가 있다고 가정합니다 C
. 그런 다음을 호출 해야C.f
하지만 Java는 (경고는 있지만) 사용하도록 허용합니다 c.f
. 스칼라 배경에서 올 때 객체에는 f
실제로 메소드가 없기 때문에 실제로 의미가 없습니다 .
명확한 분리 : Java에서는 클래스에서 정적 속성과 비 정적 속성 및 메서드를 혼합 할 수 있습니다. 훈련을 받아도 문제가되지는 않지만, 귀하 (또는 그 문제의 다른 사람)가 그렇지 않으면 정적 부품과 비 정적 부품이 끼워 져서 한 눈에 말하기가 어렵습니다. 정적 인 것과 그렇지 않은 것. 스칼라에서 컴패니언 객체 안에있는 모든 것은 해당 클래스의 런타임 객체의 일부가 아니라 정적 컨텍스트에서 사용할 수 있습니다. 반대로 클래스 내부에 작성된 경우 해당 클래스의 인스턴스에서는 사용할 수 있지만 정적 컨텍스트에서는 사용할 수 없습니다. 정적 및 비 정적 초기화 블록을 클래스에 추가하기 시작하면 Java에서 특히 부담이됩니다. 이것은 동적 실행 순서의 관점에서 이해하기가 매우 어려울 수 있습니다.
적은 코드 :의 모든 속성 또는 메소드에 정적 단어를 추가 할 필요가 없으므로 object
코드를 더 간결하게 유지할 수 있습니다 (실제로 눈에 띄는 이점은 아님).
단점은 찾기가 훨씬 어렵습니다. 정적 부분과 비 정적 부분이 함께 속해 있어야하지만 스칼라 개념의 컴패니언 객체로 분리되어 있다고 주장 할 수 있습니다. 예를 들어, 클래스 다이어그램을 갖는 것이 이상하게 보일 수 있지만 코드에서 두 가지를 작성하고 어떤 속성이 어디로 갈지 결정해야합니다.
ifnonnull
단순히와 비교하여 바이트 바이트가 생성됩니다 invokeStatic
.