2011-01-06 8 views
2

동반자 클래스가없는 싱글 톤 객체 Main을 만들면 그 싱글 톤 클래스를 가져 오는 방법이 있습니까? classOf[Main]은 "찾을 수 없음 : type Main"오류를 제공합니다.스칼라에서 Main 클래스 얻기

+0

같은 이름의 클래스에 대한 컴패니언 개체의 일부인 기본 메서드로 프로그램을 시작하려면이 메서드를 사용하려는 경우 작동하지 않습니다. 스칼라는 어떤 이유로 든 동반자가 아닌 객체에 대한 main 메소드를 특별하게 처리합니다. – Madoc

+0

@ Madad : 2.8.0에서 수정 된 줄 알았는데. 어쨌든, 나는 여전히 동반자가없는'Main' 객체를 만든다. 일반적으로'main' 메쏘드가 있습니다. – Ralph

답변

3

을, 당신은이 일을 해낼 방법 Main.getClass를 사용할 수 있습니다.

JVM은 이 Main$이라는 클래스의 인스턴스임을 알고 있으며, 필요하면 Java 리플렉션 메서드를 통해 액세스 할 수 있습니다.

어쨌든 스칼라에 반영 할 필요가 거의 없으므로 이론의 흥미로운 비트가없는 한 실제로는 필요하지 않습니다.

+0

을 참조하십시오. 사용 사례 :'val buildNumber = try { 새로운 Manifest (새로운 URL ("jar :"+ classOf [main] .getProtectionDomain.getCodeSource.getLocation + "! /META-INF/MANIFEST.MF"). openStream) .getMainAttributes.getValue ("Build-Number")} catch {case _ : ZipException => "0"} ' – Ralph

+0

감사합니다. 솔루션이 효과적이었습니다. – Ralph

0

싱글 톤 객체 (일명 모듈)에는 상속받을 수없는 "클래스"가 없습니다. 싱글 톤과 클래스를 반대 개념으로 생각하십시오.

그들은 비록 유형이 수행이 클래스의 인스턴스입니다으로

object Main 

def test(a: Main.type): Unit = println("Got: " + a) 

test(Main) 
+0

"클래스"와 "유형"의 차이점은 무엇입니까? –

+0

글쎄, 내가 말했듯이, 모듈은 클래스를 상속받을 수 없다. 따라서 Main은 클래스보다 값 ("인스턴스")입니다. Main.type은 값의 "싱글 톤 유형"을 제공합니다. http://programming-scala.labs.oreilly.com/ch12.html (단락 싱글 톤 유형), http://blogs.sun.com/sundararajan/entry/mis_understaning_scala_s_singleton –

관련 문제