구문 (FileChannel/MapMode)
와 내부 클래스에 액세스은 단순화 및 (필드, 당신도 괄호를 생략 할 수 있습니다) 정적 필드와 메소드 만 것입니다! 또한 .
및 ..
양식은 필드/메소드 용이지만 중첩/내부 클래스 용은 아닙니다!
JVM의 경우 내부 클래스 Outer.Inner
은 Outer$Inner
이라는 클래스 일 뿐이며 컴파일러는 Outer$Inner.class
파일을 만듭니다. Java 컴파일러를 사용하면 Outer.Inner
으로 참조 할 수 있습니다. 또한 Outer$Inner
이라는 비 내부 클래스를 정의하여 컴파일러에서 Outer$Inner
으로 참조하도록 할 수 있습니다. 모두 Outer$Inner
의 클래스 이름 것 때문에 당신은, 그러나, 두 가지를 동시에 정의 할 수 없습니다 (Outer$Inner.class
이름과 .class
파일을, 그래서 이것은 중복 클래스 이름이 될 것입니다!)
반사를 사용하여 - 예를 들어, Class.forName()
- 대개 일부 동적 성을 도입하기 위해 가져온 클래스의 패키지 이름을 생략 할 수 없으며 점 대신에 $
기호로 실제 클래스 이름을 사용해야합니다.
아마도 Clojure는 동일한 접근 방식을 취합니다. 따라서 클래스가 my.package
인 경우 my.package.Outer$Inner
양식을 사용해야합니다. 이미 외부 클래스를 가져온 경우에도 마찬가지입니다. 패키지 이름을 방지하기 위해 명시 적으로 내부 클래스 my.package.Outer$Inner
를 가져온 다음 Outer$Inner
로 참조 (의 실제 클래스 이름을!)하지만 당신은 단지 그것을 가져 Inner
이 줄어들지 않습니다 수 있습니다
Inner
는 아무런 의미가 없다 JVM, 자바 컴파일러 만 있으면 컴파일 타임 컨텍스트 (런타임에서는 Class.forName
과 같은 JVM에서 사용할 수 없음)에서 바로 가기를 제공합니다 ... Clojure에서 다음과 같이 정의 할 수 있습니다. (def Inner Outer$Inner)
... 또는 (def Tom Outer$Inner)
또는 (def Harry Outer$Inner)
또는 기타 ... 원하는 것이 더 좋다면.
'import' 함수 또는': import' 키워드를 사용하여 FileChannel을 가져 오는 경우'FileChannel $ MapMode'를 가져 오도록 지정해야합니다. –
감사합니다. @TerjeDahl. 나는 이것을 포함하도록 질문을 편집해야한다고 생각합니다, 함자 예 를리 카야. – Joe