[SCALA] 스칼라에서 합성 클래스로 싱글 톤?
SCALA스칼라에서 합성 클래스로 싱글 톤?
내가 스칼라 프로그래밍을 읽고있다, 나는 다음 문장 (PDF의 P.112)을 이해하지 않는다 :
내가 스칼라에서 싱글 FOOBAR이있는 경우 이것이 의미 하는가, 컴파일러는 FOOBAR $라는 이름의 클래스를 만들 것인가?
또한 무슨 일이 "정적 변수에서 참조"에 의해 저자의 의미는 무엇입니까? 일부는 foobar $ 클래스에 대한 참조를 들고 숨겨진 정적 변수 곳이 있습니까?
나는 여기에 어떤 도움을 주셔서 감사합니다.
해결법
-
==============================
1.같은 "스칼라 프로그래밍"의 장 (31)는 더 정확합니다 :
같은 "스칼라 프로그래밍"의 장 (31)는 더 정확합니다 :
object App { def main(args: Array[String]) { println("Hello, world!") } }
$ javap App$ public final class App$ extends java.lang.Object implements scala.ScalaObject{ public static final App$ MODULE$; public static {}; public App$(); public void main(java.lang.String[]); public int $tag(); }
-
==============================
2.당신은 기본적으로 올바른입니다.
당신은 기본적으로 올바른입니다.
당신은 싱글이있는 경우
object Singleton { def method = "Method result" }
다음 컴파일을 제공합니다
Singleton.class Singleton$.class
그리고 바이트 코드에 대해 당신은 싱글 먼저 발견 :
public final class Singleton extends java.lang.Object{ public static final java.lang.String method(); Signature: ()Ljava/lang/String; Code: 0: getstatic #11; //Field Singleton$.MODULE$:LSingleton$; 3: invokevirtual #13; //Method Singleton$.method:()Ljava/lang/String; 6: areturn }
즉, 참조 뭔가 싱글 $ .MODULE $라고하는 클래스의 각 방법에 대한 공공 정적 방법이며, 싱글 $의 :
public final class Singleton$ extends java.lang.Object implements scala.ScalaObject{ public static final Singleton$ MODULE$; Signature: LSingleton$; public static {}; Signature: ()V Code: 0: new #9; //class Singleton$ 3: invokespecial #12; //Method "<init>":()V 6: return public java.lang.String method(); Signature: ()Ljava/lang/String; Code: 0: ldc #16; //String Method result 2: areturn private Singleton$(); Signature: ()V Code: 0: aload_0 1: invokespecial #20; //Method java/lang/Object."<init>":()V 4: aload_0 5: putstatic #22; //Field MODULE$:LSingleton$; 8: return }
당신이 볼 경우 해당 모듈의 $는 싱글 $의 인스턴스를 보유하고 있으며 방법은 그냥 평범한 방법입니다 것입니다.
그래서, 정말이 전부 여기에 있습니다 : 정적 필드라는 모듈의 $로 싱글 $를 작성하는 것은, 필드, 다음 만드는 것이 채우기를 자체의 고유 한 인스턴스를 유지하기 위해 싱글 정적 방법과 그에서 적절한 방법으로 앞으로 모든 정적 호출 싱글 $.
from https://stackoverflow.com/questions/5721046/singletons-as-synthetic-classes-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] "=> 외부"정말 무엇을 의미합니까? (0) | 2019.11.23 |
---|---|
[SCALA] 어떻게 스칼라 미래에 던져 예외를 잡아합니까? (0) | 2019.11.23 |
[SCALA] 우편 번호에 여러 시퀀스 (0) | 2019.11.23 |
[SCALA] 슬라이스 배열 방법 및 열의 합 요소? (0) | 2019.11.23 |
[SCALA] 스칼라 스파크 : 분할 수집 여러 RDD로? (0) | 2019.11.23 |