Scala-如何解决“问题”;“值不是零的成员”;错误

Scala-如何解决“问题”;“值不是零的成员”;错误,scala,compilation,atmosphere,Scala,Compilation,Atmosphere,这个示例代码是基于大气类的,但是如果有人能给我一些关于错误的一般含义的见解,我想我可以找出任何特定于大气的解决方案 val bc = BroadcasterFactory.getDefault().lookup(_broadcasterId) bc.broadcast(message) 在第一行之后,bc应该包含一个对象的句柄,该对象的类定义包括方法broadcast()——事实上,它包含几个重载变体。但是,编译器在第二行代码中阻塞了以下内容:“值广播不是Nothing的成员” 关于导致这种

这个示例代码是基于大气类的,但是如果有人能给我一些关于错误的一般含义的见解,我想我可以找出任何特定于大气的解决方案

val bc = BroadcasterFactory.getDefault().lookup(_broadcasterId) 
bc.broadcast(message)
在第一行之后,bc应该包含一个对象的句柄,该对象的类定义包括方法broadcast()——事实上,它包含几个重载变体。但是,编译器在第二行代码中阻塞了以下内容:“值广播不是Nothing的成员”

关于导致这种情况的原因有什么想法/建议吗

谢谢

编辑:[Factor]的签名。查找: 抽象广播查找(对象id)

注意:1)这是我在示例中使用的签名版本,2)这是java Inteface签名-而getDefault()将返回实现该接口的实例化对象

解决方案:强制类型强制转换值:

val bc: Broadcaster = BroadcasterFactory.getDefault().lookup(_broadcasterId)

Nothing
是类型名称。它是所有其他类型的子类型。不能从
Nothing
本身调用方法,必须指定确切的类型(
(bc:ExactType).broadcast(message)
)<代码>无没有实例。方法,该方法返回
Nothing
实际上永远不会返回值。它最终将抛出一个异常

类型推断

:

您可以这样指定类型参数:

val bc = BroadcasterFactory.getDefault().lookup[Broadcaster](_broadcasterId) 
def lookup(...) = ???
实施草案

在开发过程中,
查找
可以这样“实现”:

val bc = BroadcasterFactory.getDefault().lookup[Broadcaster](_broadcasterId) 
def lookup(...) = ???
返回
无任何内容


您应该像这样指定
lookup
方法的结果类型:
def lookup(…):=…
bc
的类型:
val bc:=

您可以在第1行上张贴
lookup
方法的签名吗。这可能就是问题所在。它返回的是一个
Nothing
,而不是具有
broadcast
方法的任何内容。是的。这归结为编译器没有产生正确的类推断。我不会猜到的-谢谢你@mjk:java接口在没有类型参数的情况下不能返回
Nothing
。您确定在
getDefault
lookup
中没有类型参数吗?我已经更新了我的答案。坦率地说,关于大气库,我什么都不确定。一周来,我一直在努力整合它,现在正处于高兴的时刻。。这就是说,我从库源文件中找到了这个:public final Broadcaster lookup(Object id),它反过来对另一个覆盖进行更健壮的调用。有一件事确实让我感到困惑,那就是无法将这些调用链接在一起——但我对Scala有限的经验并不能让我告诉你更多。再次感谢你-cheers@mjk:
无法将这些调用链接在一起
:您应该指定类型参数:
广播工厂.getDefault().lookup[Broadcaster](\u广播ID).broadcast(message)
。在我遇到的所有不同示例中,对于库的所有不同版本,我不记得曾经见过使用这种形式的类型声明。更有趣的是,我在这里发布的代码是从scala web框架的一个更大的部分/示例中提炼出来的——它在那里工作得很好,但从我的代码库中提取和使用时就不行了。知道是什么原因吗?(顺便说一句,我并不是在暗示你的例子在任何方面都是错误的,只是我从未见过其他人必须将这些声明注入到他们的例子中)
def lookup(...) = ???