设计选择背后的原因是什么使RecursiveTask的计算方法受到保护?

时间:2014-07-10 23:28:27

标签: java fork-join

在Fork / Join框架中,RecursiveTask<T>的{​​{1}}方法被声明为compute(),而不是默认的包。你只剩下覆盖选项,包括protectedprotected(包默认不会编译。)

是否存在选择受保护而不是包默认的原因?我有兴趣知道,因为这可能有助于我理解我尚未意识到的框架的一个方面。

1 个答案:

答案 0 :(得分:0)

如果compute()RecursiveTask<T>中拥有了套餐访问权限,则无法覆盖该套餐。当一种方法超越另一种方法时,JLS §8.4.8.1会说出来;如果超类中的方法具有包访问权限,则子类中的compute()方法仅在与超类位于同一包中时才会覆盖它。由于超类RecursiveTask<T>位于java.util.concurrent,因此如果您的类也位于java.util.concurrent中,那么您的具体子类只能覆盖它 - 您不会想要这样做,并且Java可能不会让你这么做。