sim*_*mao 5 scala scala-java-interop
我正在调用一个io.netty.bootstrap.BootStrap具有以下签名的java方法:
public <T> B option(ChannelOption<T> option, T value)
Run Code Online (Sandbox Code Playgroud)
我使用以下代码来调用此方法:
b.option(ChannelOption.SO_KEEPALIVE, true);
Run Code Online (Sandbox Code Playgroud)
这无法编译,出现以下错误:
Error:(57, 30) type mismatch;
found : io.netty.channel.ChannelOption[Boolean]
required: io.netty.channel.ChannelOption[Any]
Note: Boolean <: Any, but Java-defined class ChannelOption is invariant in type T.
You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
b.option(ChannelOption.SO_KEEPALIVE, true); // (4)
^
Run Code Online (Sandbox Code Playgroud)
我不完全理解这说的是什么,但我理解它抱怨得到一个布尔值,因为它是参数化
Any而不是Boolean.所以我尝试了以下代码,它的工作原理:
b.option(ChannelOption.SO_KEEPALIVE, Boolean.box(true));
Run Code Online (Sandbox Code Playgroud)
这编译和工作.有没有办法让这个更漂亮没有box电话?
有人可以翻译那个编译错误吗?
谢谢.
Java泛型在scala中是不变的,因此您无法传递scala Boolean并按照您的预期推断类型.明确注释类型应修复它:
b.option[java.lang.Boolean](ChannelOption.SO_KEEPALIVE, true)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
588 次 |
| 最近记录: |