동반자 클래스가없는 싱글 톤 객체 Main
을 만들면 그 싱글 톤 클래스를 가져 오는 방법이 있습니까? classOf[Main]
은 "찾을 수 없음 : type Main"오류를 제공합니다.스칼라에서 Main 클래스 얻기
답변
을, 당신은이 일을 해낼 방법 Main.getClass
를 사용할 수 있습니다.
JVM은 이 Main$
이라는 클래스의 인스턴스임을 알고 있으며, 필요하면 Java 리플렉션 메서드를 통해 액세스 할 수 있습니다.
어쨌든 스칼라에 반영 할 필요가 거의 없으므로 이론의 흥미로운 비트가없는 한 실제로는 필요하지 않습니다.
을 참조하십시오. 사용 사례 :'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
감사합니다. 솔루션이 효과적이었습니다. – Ralph
싱글 톤 객체 (일명 모듈)에는 상속받을 수없는 "클래스"가 없습니다. 싱글 톤과 클래스를 반대 개념으로 생각하십시오.
그들은 비록 유형이 수행이 클래스의 인스턴스입니다으로
object Main
def test(a: Main.type): Unit = println("Got: " + a)
test(Main)
"클래스"와 "유형"의 차이점은 무엇입니까? –
글쎄, 내가 말했듯이, 모듈은 클래스를 상속받을 수 없다. 따라서 Main은 클래스보다 값 ("인스턴스")입니다. Main.type은 값의 "싱글 톤 유형"을 제공합니다. http://programming-scala.labs.oreilly.com/ch12.html (단락 싱글 톤 유형), http://blogs.sun.com/sundararajan/entry/mis_understaning_scala_s_singleton –
- 1. Main()의 클래스 호출
- 2. 클래스 다이어그램에서 main() 표현하기
- 3. 스칼라에서 클래스 변수를 상수로 사용
- 4. 스칼라에서 리플렉션을 통해 추상 클래스 구현/인스턴스화
- 5. 프로그램 대신 클래스 라이브러리의 Main 사용하기
- 6. main() 전에 클래스/함수/사물 등록하기
- 7. 스칼라에서 클래스 변수를 대체하는 것은 무엇입니까?
- 8. 클래스 객체를 스칼라에서 Java로 전달하는 방법은 무엇입니까?
- 9. 현재 boost :: thread/main thread에 대한 참조 얻기
- 10. 파이썬에서 기본 클래스 유형 얻기
- 11. 클래스 호출에 대한 정보 얻기
- 12. Python : 메소드가 속한 클래스 얻기
- 13. 프로세스와 연결된 .NET 클래스 얻기
- 14. Objective-C : 클래스 클러스터에서 진정한 클래스 클래스 얻기
- 15. 스레드 "main"의 예외 java.lang.NoSuchMethodError : main-code
- 16. 스칼라에서 스크립팅
- 17. main 메서드 상속
- 18. 스칼라에서, 포함하는 클래스 외부의 중첩 된 유형을위한 팩토리를 빌드하려면 어떻게해야합니까?
- 19. 스칼라에서 클래스 내의 변수에 특성을 "통과"시키는 방법이 있습니까?
- 20. 스칼라에서 기본 클래스/특성의 분산을 변경할 수 있습니까?
- 21. 왜 사람들은 스칼라에서 다른 객체 안에 클래스, 특성, 객체를 정의합니까?
- 22. OBJ-C 클래스 계층 구조에서 클래스 이름을 얻기
- 23. 클래스 외부에 설정된 사용자 지정 특성 얻기
- 24. Grails Plugin : 모든 명령 객체 클래스 얻기
- 25. 클래스 라이브러리를 호출하는 웹 서비스 URL 얻기
- 26. 네임 스페이스 내의 모든 클래스 얻기
- 27. 배열 얻기 구성 요소 유형의 클래스
- 28. AS3, 일부 메서드가 정의 된 클래스 얻기
- 29. 확장 건설에서 하위 클래스 정보 얻기
- 30. 스칼라에서 체크되지 않은 제네릭 경고?
같은 이름의 클래스에 대한 컴패니언 개체의 일부인 기본 메서드로 프로그램을 시작하려면이 메서드를 사용하려는 경우 작동하지 않습니다. 스칼라는 어떤 이유로 든 동반자가 아닌 객체에 대한 main 메소드를 특별하게 처리합니다. – Madoc
@ Madad : 2.8.0에서 수정 된 줄 알았는데. 어쨌든, 나는 여전히 동반자가없는'Main' 객체를 만든다. 일반적으로'main' 메쏘드가 있습니다. – Ralph