Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala中无特征的方法契约_Scala - Fatal编程技术网

Scala中无特征的方法契约

Scala中无特征的方法契约,scala,Scala,我试图为一个Java库添加一些可重用性,该库有一些跨类的通用方法,但其方法不是通用层次结构的一部分。我很确定我以前见过Scala允许参数类使用非基于特征的契约,但就我而言,目前我在任何地方都找不到这些信息 我的记忆正确吗?有人能为我指出关于上述语言特性的文档的正确方向吗(如果我没弄错的话) 对于一些添加的上下文,我试图在使用一些Google Java库时减少重复代码,在这些库中,getNextPageToken()、setPageToken()等东西在许多类之间是通用的,但在层次结构中没有进一步

我试图为一个Java库添加一些可重用性,该库有一些跨类的通用方法,但其方法不是通用层次结构的一部分。我很确定我以前见过Scala允许参数类使用非基于特征的契约,但就我而言,目前我在任何地方都找不到这些信息

我的记忆正确吗?有人能为我指出关于上述语言特性的文档的正确方向吗(如果我没弄错的话)


对于一些添加的上下文,我试图在使用一些Google Java库时减少重复代码,在这些库中,getNextPageToken()、setPageToken()等东西在许多类之间是通用的,但在层次结构中没有进一步实现,在层次结构中,我可以选择指定一个通用父类作为参数类型。因此,本质上我希望强制这些方法存在,并使用所述方法契约将重复的请求和分页代码卸载到公共函数中。

您可能希望使用结构类型:

例如:

def method(param: { def getNextPageToken(): Unit })

param
需要有
getNextPageToken
方法,该方法不带参数且返回
Unit
。它是用反射处理的。

也许你想要这个
def方法(param:{def getNextPageToken():Unit})
因此,该参数需要有getNextPageToken方法,不带参数,并返回
Unit
。它是通过反射来处理的。我想这正是我想要的。(进一步谷歌搜索后,这似乎被称为“结构类型化”)。接下来的问题:我的IDE将传入的参数类标记为无效。看起来我不能用它来强制Java类。这听起来像是一个准确的陈述吗?(我假设是这样的,因为我刚刚在Scala中创建了一个骨架类,它通过时没有任何错误)它似乎对我有效,可能是类型错误或类似的情况。我创建了一个接受
String=>Unit
的scala类和一个方法为
String=>void
的java类,我可以在scala代码中将它传递给scala类。我也可以从java代码中调用这个acceptor类,但这里预期的类型是object,如果传递了错误的类型,则会抛出异常。如果您仍然有问题,也许让我知道您使用的确切类型以及您想如何称呼它。谢谢您的澄清。我可能需要仔细检查我的类型,我会看看代码,看看问题出在哪里。同时,如果你想发布你的初始评论作为回答,那么我将继续并将其标记为已接受。