복붙노트

[SCALA] 상관, AnyVal는, AnyRef는, 객체와 자바 코드에서 사용될 경우 그들이 어떻게지도 할 사이의 관계는 무엇인가?

SCALA

상관, AnyVal는, AnyRef는, 객체와 자바 코드에서 사용될 경우 그들이 어떻게지도 할 사이의 관계는 무엇인가?

나는 보통 컴파일 할 때까지 모든 조합을 시도하고 끝낸다. 누군가가 어디 사용해야하는지 설명 할 수 있습니까?

해결법

  1. ==============================

    1.나는 한 점에서 크리스의 대답에 동의합니다. 클래스는 모든, AnyRef 및 AnyVal는 클래스입니다. 그러나 그들은 때문에 JVM의 본질적인 한계로, 바이트 코드의 클래스로 표시되지 않습니다.

    나는 한 점에서 크리스의 대답에 동의합니다. 클래스는 모든, AnyRef 및 AnyVal는 클래스입니다. 그러나 그들은 때문에 JVM의 본질적인 한계로, 바이트 코드의 클래스로 표시되지 않습니다.

    이것은 자바에서 모든 것이 객체라는 사실에서 발생한다. 객체뿐만 아니라, 기본 요소가 있습니다. 자바의 모든 객체는 프로그래머에 의해 확장하지, 현재 *, java.lang.Object 상위에서 하위하지만 프리미티브 구별하고. 또한 프리미티브는 "사업자"가 아닌 방법이 있습니다.

    스칼라에서, 다른 한편으로는, 모든 객체는 모든 객체는 클래스에 속하는, 그들은 방법을 통해 상호 작용이다. 생성 된 JVM 바이트 코드이 반영되지 않습니다,하지만 그들이 덜 그래서, 자바 제네릭을 가지고 것처럼 바이트 코드를 가지고 있지 않는 경우에도하지 않습니다.

    그래서, 스칼라에서 모든 개체는 어떤에서 후손이며, 그 자바 기본 요소를 고려 모두 어떤 자바 객체를 고려하고 무엇을 포함하고 있습니다. 그런 통일이 없기 때문에 자바에 상응하는 항목이 없습니다.

    자바 원시 간주됩니다 모든 스칼라 AnyVal에서 후손이다. 스칼라 2.10.0까지 AnyVal는 밀봉되고, 프로그래머는 그것을 확장 할 수 없습니다. 스칼라는 적어도 사용자 정의 "프리미티브"를 인식하는 상호 운용성 혼자 호출 이후는 닷넷에 스칼라와 무슨 일이 일어날 지보고 흥미 있어야한다.

    또한 상관은 (임의의 비율로 JVM에서) java.lang.Object 상위 동등하다 AnyRef이 연장된다.

    스칼라 2.9.x까지, 사용자는 일부 또는 AnyVal을 확장 할 수 없으며, 자바에서 그들을 참조하지만, 그들은 스칼라에 넣을 수있는 다른 용도가 있었다. 특히, 서명을 입력합니다 :

    def f(x: AnyVal) = println(x)
    def g(x: AnyRef) = println(x)
    def h(x: Any) = println(x)
    

    각 수단은 클래스 계층 구조에서 명백한 무엇을해야합니다. 참고로, 그러나, F와 H 의지 자동 상자이지만, g는하지 않습니다. 즉 약간에게 자바가 자동 복싱을 일으킬 것이라고 F에서 수행하고 시간이 지정 될 수 없으며, (java.lang.Object 상위로 정의) g 것과 반대입니다.

    스칼라 2.10.0 시작하지만, 사용자는 다음과 같은 의미로 AnyVal 또는 어떤을 확장 할 수 있습니다 :

    PS : 내 자신의 관점에서, 자바는 좋은 성능을 달성하기 어려운 입증하고 그들에게 의지하지 않고 병렬로 어쩌면 "구조체"프리미티브 및 형식 정의를 허용에 C 번호를 따를 가능성이 높습니다.

  2. ==============================

    2.이 봤어? 페이지의 텍스트 일부 자바 상호 운용성 발언이있다. http://www.scala-lang.org/node/128

    이 봤어? 페이지의 텍스트 일부 자바 상호 운용성 발언이있다. http://www.scala-lang.org/node/128

  3. ==============================

    3.모든 및 AnyVal, 나는 생각 스칼라 형식 시스템의 일부이며 (아무것도 유형이 아닌 클래스없는 것과 같은 방식으로) 같은 클래스하지 않습니다. 당신은 자바 코드 내에서 명시 적으로 사용할 수 없습니다.

    모든 및 AnyVal, 나는 생각 스칼라 형식 시스템의 일부이며 (아무것도 유형이 아닌 클래스없는 것과 같은 방식으로) 같은 클래스하지 않습니다. 당신은 자바 코드 내에서 명시 적으로 사용할 수 없습니다.

    Howwever, 자바 / 스칼라 상호, 자바 객체는 스칼라 않음 / AnyRef을 기대 받아들이는 방법이다.

    당신은 실제로 어떻게하려고?

  4. from https://stackoverflow.com/questions/2335319/what-are-the-relationships-between-any-anyval-anyref-object-and-how-do-they-m by cc-by-sa and MIT license