在Fork / Join框架中,RecursiveTask<T>
的{{1}}方法被声明为compute()
,而不是默认的包。你只剩下覆盖选项,包括protected
和protected
(包默认不会编译。)
是否存在选择受保护而不是包默认的原因?我有兴趣知道,因为这可能有助于我理解我尚未意识到的框架的一个方面。
答案 0 :(得分:0)
如果compute()
在RecursiveTask<T>
中拥有了套餐访问权限,则无法覆盖该套餐。当一种方法超越另一种方法时,JLS §8.4.8.1会说出来;如果超类中的方法具有包访问权限,则子类中的compute()
方法仅在与超类位于同一包中时才会覆盖它。由于超类RecursiveTask<T>
位于java.util.concurrent
,因此如果您的类也位于java.util.concurrent
中,那么您的具体子类只能覆盖它 - 您不会想要这样做,并且Java可能不会让你这么做。