【问题标题】:Differences between Props(new A with B) and Props[A with B]Props(new A with B) 和 Props[A with B] 的区别
【发布时间】:2015-10-09 15:30:18
【问题描述】:

我试图创建一个简单的特征来拦截从任意参与者接收到的消息,使用可堆叠特征模式。但是在创建Props 时,发现Props(new A with B)Props[A with B] 不同。即,第一个变体有效,但第二个变体无效。区别在哪里?

一个最小的例子:https://gist.github.com/ale64bit/df496ec2a43d0ec2ddb3

谢谢!

【问题讨论】:

    标签: java scala akka traits


    【解决方案1】:

    我不确定行为背后的确切原因,但似乎使用参数化版本不知道如何构造请求类型,而只是构造主类型。 IE。当你打印出你得到的actor内部的实际类时

    Props(new FooActor with Interceptor) => Main$$anonfun$1$$anon$1
    Props[FooActor with Interceptor] => FooActor
    

    我最好的猜测是ClassTag 或从ClassTag 生成的构建器不理解参数化的FooActor with Interceptor 语法。但是,如果您之前创建了一个混合这两者的新类,它确实可以工作:

    class FooActorWithInterceptor extends FooActor with Interceptor
    
    Props[FooActorWithInterceptor] => FooActorWithInterceptor
    

    顺便说一句,我被多次咬伤后发现,应该避免使用参数化版本的 Props。虽然它适用于无参数构造函数版本,但如果您向构造函数添加一些参数Props[A] 将不会在编译时抱怨。同时Props(new A)会给你一个编译错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      相关资源
      最近更新 更多