我想:
def myMethod[T < ???](f: T): Unit = {
f()
}
该方法的其余部分并不重要,但可以用某些方式替换???
,这样可以确保T
是一种方法
如果可能的话,还要进一步确保T
的返回类型是定义的吗?
赞[T < (_*) => Int]
谢谢。
答案 0 :(得分:1)
定义一个type
,如下面的简单示例,可以满足您的需求吗?
type Fcn = String => Int
def myMethod(s: String, f: Fcn): Unit = {
println(f(s))
}
myMethod("hello", (s: String) => s.length)
// 5
答案 1 :(得分:1)
您可以使用函数文字:
def myMethod[A, T](f: A => T) {
f(someAValue)
}
或者如果你想要不带参数的函数:
def myMethod[T](f: () => T) {
f()
}
但是根据您的评论判断,您似乎特别想要引用方法,并查询方法以获取有关其自身的信息,这不是基本Scala的功能。你可以用反射做一些,但反射是最好避免的一个领域。
答案 2 :(得分:0)
从技术上讲,您不能直接传递方法,因为方法不是可以实例化和传递的值。通常传递的是函数实例。当你传递一个方法时,编译器实际上正在为你创建一个函数实例(方法提升或eta-expansion)。
但是,如果您要检查有关该方法的元数据(名称,弃用),那么这不会起作用。为此,你可能正在寻找反思。您可以让您的方法采用java.reflect.Method
的实例,但这需要您在呼叫站点获取该实例。