开发者社区> 问答> 正文

Scala调用Java 泛型函数:报错

最近在用Scala调用Java的多态类。

...

bootstrap.group(bossGroup, workerGroup)
  //创建NioServerSocketChannel
  .channel(classOf[NioServerSocketChannel])
  //绑定I/O事件处理类
  .childHandler(new ChannelInitializer[SocketChannel] {
  override def initChannel(ch: SocketChannel): Unit = {
    ch.pipeline().addLast(
      //            new ObjectEncoder,
      //            new ObjectDecoder(ClassResolvers.cacheDisabled(getClass.getClassLoader)),
      new ServerHandler
    )
  }
}).option(ChannelOption.SO_BACKLOG, 128)

...

Java中的Code

public <T> B option(ChannelOption<T> option, T value) {
    if (option == null) {
        throw new NullPointerException("option");
    }
    if (value == null) {
        synchronized (options) {
            options.remove(option);
        }
    } else {
        synchronized (options) {
            options.put(option, value);
        }
    }
    return (B) this;
}

 

Error:(38, 31) type mismatch;
 found   : io.netty.channel.ChannelOption[Integer]
 required: io.netty.channel.ChannelOption[Any]
Note: Integer <: 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)
      }).option(ChannelOption.SO_BACKLOG, 128)

这个是问题。不是说Scala调用Java是无缝的吗。现在卡在这里了。想问哪位遇到过

 

展开
收起
kun坤 2020-06-14 09:59:45 1120 0
1 条回答
写回答
取消 提交回答
  • .option(ChannelOption.SO_BACKLOG, Integer.valueOf(128))

     

    ######问题解决了。我没有明白我直接写128和Integer.valueOf(128)这两个区别发生在了哪里######

    option方法声明为:

    public <T> B option(ChannelOption<T> option, T value) 

    由于Integer和Int的共同父类型是Any,如果value参数传入Int类型,则Scala编译器在类型推断时会认为option参数的类型应该是ChannelOption[Any],从而导致编译报错。

    ######

    引用来自“joymufeng”的评论

    option方法声明为:

    public <T> B option(ChannelOption<T> option, T value) 

    由于Integer和Int的共同父类型是Any,如果value参数传入Int类型,则Scala编译器在类型推断时会认为option参数的类型应该是ChannelOption[Any],从而导致编译报错。

    正解

    2020-06-14 09:59:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载