Programming

Any, AnyVal, AnyRef, Object 간의 관계는 무엇이며 Java 코드에서 사용될 때 어떻게 매핑됩니까?

procodes 2020. 8. 13. 21:39
반응형

Any, AnyVal, AnyRef, Object 간의 관계는 무엇이며 Java 코드에서 사용될 때 어떻게 매핑됩니까?


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


나는 한 가지 측면에서 Chris의 대답동의하지 않을 것 입니다. 클래스 Any, AnyRefAnyVal 있습니다 클래스. 그러나 JVM의 본질적인 제한 때문에 바이트 코드에서 클래스로 나타나지 않습니다.

이것은 Java의 모든 것이 객체가 아니라는 사실에서 발생합니다. 객체 외에도 기본 요소가 있습니다. Java의 모든 객체는의 자손 java.lang.Object이지만 기본 요소는 분리되어 있으며 현재 * 는 프로그래머가 확장 할 수 없습니다. 또한 프리미티브에는 메소드가 아닌 "연산자"가 있습니다.

반면에 Scala에서는 모든 것이 객체이고 모든 객체는 클래스에 속하며 메서드를 통해 상호 작용합니다. 생성 된 JVM 바이트 코드는이를 반영하지 않지만, 바이트 코드에 제네릭이 없더라도 Java가 제네릭을 가지고있는 것처럼 덜 그렇게 만들지는 않습니다.

따라서 Scala에서 모든 객체는의 자손 Any이며 Java가 객체로 간주하는 것과 Java가 기본으로 간주하는 것을 모두 포함합니다. Java에는 그러한 통합이 없기 때문에 이에 상응하는 것이 없습니다.

Java에서 기본 요소로 간주되는 모든 것은 AnyValScala의 후손입니다 . Scala 2.10.0 AnyVal이 봉인 되기 전까지 는 프로그래머가 확장 할 수 없었습니다. 상호 운용성만으로도 Scala가 최소한 사용자 정의 "기본 요소"를 인식하도록 요구하기 때문에 .Net에서 Scala에서 어떤 일이 발생할지 보는 것은 흥미로울 것입니다.

또한 확장 Any(JVM에서 AnyRef)와 동등합니다 java.lang.Object.

Scala 2.9.x까지는 사용자가 Anyor를 확장 하거나 AnyValJava에서 참조 할 수 없었지만 Scala에서 사용할 수있는 다른 용도 있었습니다 . 구체적으로 서명을 입력하십시오.

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

각각의 의미는 클래스 계층 구조에서 분명해야합니다. 참고로, 그러나, 즉 fh의지 자동 상자,하지만 g하지 않습니다. 하는 자바는 점에서, 무엇의 반대 비트입니다 fh지정 될 수없고, g(정의 java.lang.Object자동 권투를 야기을).

사용자가 확장 할 수 있지만, 스칼라 2.10.0 시작 AnyVal또는 Any다음과 같은 의미로 :

  • 클래스가 확장 AnyVal되면 특정 조건에서 힙에 인스턴스가 생성되지 않습니다. 즉,이 클래스의 필드 (2.10.0에서는 단일 필드 만 허용됨-변경 사항이 계속 표시되는지 여부)가 기본 요소이든 다른 개체에 대한 참조 든 스택에 유지됩니다. 이를 통해 인스턴스화 비용없이 확장 메서드를 사용할 수 있습니다.

  • 형질 확장하는 경우 Any, 다음 두 연장 클래스와 함께 사용할 수있는 AnyRef확장 클래스 AnyVal.

추신 : 제 생각에 Java는 "struct"primitives, 아마도 typedefs를 허용하는 데 C #을 따를 것 같습니다. 그들에 의존하지 않는 병렬 처리는 좋은 성능으로 달성하기 어렵 기 때문입니다.


봤어? 페이지의 텍스트에는 Java 상호 운용성 설명이 있습니다. http://www.scala-lang.org/node/128

Scala 클래스 계층 구조


Any그리고 AnyVal나는 생각 스칼라의 한 부분이다 형식 시스템같은 클래스되지 않습니다 (같은 방법으로 Nothing형식이 아닌 클래스이다). Java 코드 내에서 명시 적으로 사용할 수 없습니다.

그러나 Java / Scala 상호 운용에서 Java를 받아들이는 메서드 Object는 scala Any/ AnyRef.

실제로 무엇을하려고합니까?

참고 URL : https://stackoverflow.com/questions/2335319/what-are-the-relationships-between-any-anyval-anyref-object-and-how-do-they-m

반응형