2014-04-23 4 views
4

Clojure에서 인수없이 static 메서드를 호출하는 방법을 알아 내려고하고 있습니다. 두 가지 (나쁜) 예는 (sun.misc.Unsafe/getUnsafe)(Object/getClass)이며 모두 에 의해 발생하는 CompilerException을 던집니다.Clojure에서 인수없이 Java 정적 메서드를 호출하려면 어떻게해야합니까?

getClass을 호출하는 더 간단한 방법이 있다는 것을 알고 있으며 sun.misc.Unsafe을 전혀 사용하지 않아야합니다. 일반적으로 Clojure에서 no-arg 정적 메서드를 호출하는 방법을 궁금해합니다.

+2

Object/getClass는 정적 메서드가 아닙니다. 객체에 대해 호출합니다. – WolfeFan

답변

5

귀하의 예는 작동하지 않지만, 다음은

(System/currentTimeMillis) 
> 1398285925298 

그래서 그 인수 없음의 정적 메서드를 호출하는 방법 않습니다.

Object/getClassdoesn't appear은 정적 방법입니다. 그것은 클래스가 아니라 객체에 대한 호출을 의미합니다.

3

Unsafe 인스턴스를 얻는 것은 몇 가지 액세스 제한을 극복하는 것을 포함합니다. 가장 간단한 방법은 리플렉션을 사용하는 것입니다. 이 방법과 다른 방법에 대한 설명은 Mykhailo Kozik의 Java Magic. Part 4: sun.misc.Unsafe 블로그 게시물을 참조하십시오.

(.getClass the-unsafe) ; the-unsafe obtained as above 
;= sun.misc.Unsafe 
: - 그것은 모든 개체에 따라서 사용할 수 Object에 의해 선언 된 인스턴스 메소드의

(let [f (.getDeclaredField sun.misc.Unsafe "theUnsafe")] 
    (.setAccessible f true) 
    (.get f nil)) 
;= #<Unsafe [email protected]> 

바와 같이 acomar 및 WolfeFan 지적, getClass 정적 방법이 아닙니다 : 여기에 그냥 않는 Clojure의 조각이다

실제 질문에 대해서는 (Foo/meth)이 Clojure에서 인수가없는 정적 메서드 호출에 대한 올바른 구문입니다.

+0

나는 액세스 제한에 대해 알고 있지만'NoSuchFieldException'이 아닌'SecurityException'을 기대하고있었습니다. – Demi

관련 문제