Java导scala包的一个特性:不能调用嵌套对象

本人在尝试写cep的时候,发现了java导scala包的一个特性。

我在写其他工具类的时候,使用的是scala编写,但是在学习cep的时候,因为cep对scala支持不行,使用了java编写。当时候认为scala和java应该是互通的,并且我写了一个测试类也证明了可以正常互相调用。虽然不推荐使用,但是代码应该能跑通。结果报了很奇怪的错误:694f4306cd2e4f5180e7ed4269bbd8bc.png

明明已经正常导包,但是却找不到这个类。

最终研究发现,是因为我在编写的时候使用了嵌套类:

object Timer {
  object WatermarkFactory {....}
  object TimeWindowFactory {....}
}

在java环境下,是无法识别这种嵌套类的。

最后我又写了一个小测试来证明这个特性:

先用scala写一个类

object test02 {
  object test03{
    def out:Int = {
      111
    }
  }
}

然后在java写一个类调用

public class test {
    public static void main(String[] args) {
        System.out.println(test02.test03.out());
    }
}

结果果然是报错的

865c3ffc62104b0bb764543577a1f964.png

如果scala类这样写

object test02 {
  def out:Int = {
    111
  }
}

并且java直接调用

public class test {
    public static void main(String[] args) {
        System.out.println(test02.out());
    }
}

可以正常得到结果

62d23651891445b6994e94ae68e0887a.png

这事告诉我们,java代码和scala代码还是最好不要混写,大佬们不推荐是有不推荐的理由的,混写总能遇见奇奇怪怪的问题。

 

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值