在编译时获取Class <T>?

use*_*860 4 reflection scala compile-time

在Java中,您可以编写:

Class<SomeClass> foo = SomeClass.class;
Run Code Online (Sandbox Code Playgroud)

我正在玩Scala并想要更多:我希望在编译时获得一个Method(及其泛型类型),如下所示:

val foo : Method[...] = SomeClass.class.someMethod
Run Code Online (Sandbox Code Playgroud)

甚至:

val foo : Method[...] = someObject.class.someMethod
Run Code Online (Sandbox Code Playgroud)

有没有办法在Scala中做这样的事情?

Kev*_*ght 6

或许,对于需要Method实例的Java库的互操作的唯一例外,在Scala中永远不需要执行此操作.

如果需要传递一个方法以便以后调用; 然后部分应用它来创建一个FunctionN实例,通过一个名字参数传递它,或者在第一种情况下直接创建它作为一级函数.

如果您需要反思方法,以便可以绕过私人可见性,也许是为了测试,那么您真的应该重构您的设计,以避免首先考虑可见性限制.

如果您正在探索Scala,并了解概念与java的比较.或者,如果你不幸遇到一个糟糕的互操作案例,那么等效的构造SomeClass.class就是classOf[SomeClass].希望你永远不需要它:)