背景:我注意到在许多项目中,几乎所有内部代码中的类都是公开的而不是最终的,即使它们不需要。然而,对我来说,不默认做出这个决定似乎是明智的,但只有当它们实际上是为了从系统的其他部分使用时才公开类。拥有包保护类是一种在模块之间强制执行边界的简单机制,并可作为类预期用途的文档。如果有一个(最好是免费的:-)工具来保护所有可以在不破坏程序的情况下被保护的类,并且可能使所有没有子类的东西成为最终的,那将是开始有意识地使用保护机制。(当然你需要事后调整。)你知道这样的工具吗?警告:我知道有更好的模块化机制,如OSGI和计划中的super包等。但在许多当前项目中,这不是一个选项,使用普通的旧Ja
我发现了protected的这种用法为我的其他问题寻找解决方案时的修饰符:IgnoringcaseinstringswithunitilsReflectionComparator在org.unitils.reflectionassert.ReflectionComparatorFactory类有一个带有签名的方法:protectedstaticListgetComparatorChain(Setmodes)但这只是特例。毕竟我们总是可以扩展这样的任何非最终类并“覆盖”它是静态的protected新方法public修饰符。说,我们有一个类A:publicclassA{protecteds
我正在学习java中的访问级别,我创建了3个类:在包my.inheritance中我有A类和C类packagemy.inheritance;publicclassA{protectedinta=15;}packagemy.inheritance;publicclassC{publicstaticvoidmain(String[]args){Aa=newA();System.out.println(a.a);}}在另一个名为my.inheritance.test的包中,我有一个类B试图访问int值a的protected字段,但编译器对此提示!packagemy.inheritance.t
关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭上个月。Improvethisquestion我正在实现一个接口(interface):publicinterfaceConsultant{//somedocumentationhereexplainingitshouldthrow3typesofexceptionsCellLocationsuggest(GameBoardgameBoard)
作为一个(迂腐的)初学者Java程序员,我想知道,将所有子类使用的公共(public)代码块移动到单独的protected(final)父类中的方法?诸如用通用值填充列表或通用过滤算法等任务...是否也可以使用protected静态方法?classA{protectedfinalListgetVariants(){...}protectedfinalListfilterResults(Listvariants){...}}classBextendsA{publicListdoSomethingUsefull(){ListcommonVariants=getVariants();...r
我是Java新手,有一个非常基本的问题。我在同一个包下有2个父类。Animal抽象类和Machine类。现在,Animal抽象类有一个protected方法。我知道如果类在同一个包下,则可以访问protected方法。我可以在我的Machine类中访问那个protected方法,问题是……是否可以覆盖那个protected方法?不扩展Animal类。 最佳答案 protected-可以被子类覆盖,无论它们是否在同一个包中默认(无访问修饰符)-只有当两个类在同一个包中时才能访问或覆盖 关于
这是同一问题的稍微详细的版本。我们不能在子类中访问(父类(superclass)的)protected变量,子类在不同的包中。我们只能访问父类(superclass)的继承变量。但是,如果我们将修饰符更改为“protectedstatic”,那么我们也可以访问父类(superclass)的变量。为什么会这样?这是我试图解释的相同代码片段。packagefirstOne;publicclassFirst{**protected**inta=7;}packagesecondOne;importfirstOne.*;publicclassSecondextendsFirst{protecte
父类不是也不可能是抽象的。重载方法受到保护,因此不能在那里使用接口(interface)。考虑到这两个限制是否可以做到? 最佳答案 您不能强制覆盖该方法-这就是抽象方法的用途(您已声明这不是一个选项)。一种可能是让基类中的方法抛出一个UnsupportedOperationException。然后,子类必须覆盖它以防止抛出错误。这样,您至少可以检测该方法是否已被覆盖。例如:publicclassFather{publicvoidmethod(){thrownewUnsupportedOperationException();}}pu
我一直在互联网上搜索JAXB生成的类具有protected成员(所有成员,无论继承如何)的原因。我希望成员是私有(private)的。我的搜索是空的。我有普通的xsd文件,这些文件使用Maven和JAXB转换为Java类。理想情况下,生成的成员应该是私有(private)的,但我找不到实现此目的的方法。有没有办法修改这个默认行为? 最佳答案 好吧,我要回答我自己的问题。创建插件是正确的方法。我编写了以下插件,它似乎可以工作。publicclassPrivateMemberPluginextendsPlugin{@Overridepu
我需要允许为Facebook共享的用户保护页面建立索引。基本上,我有一个提供优惠券的RoR应用程序,我需要用户能够在facebook上分享优惠券。唯一的问题是用户必须有一个帐户才能查看每张优惠券页面上的所有优惠券详细信息。我希望他们能够通过指向该优惠券的链接共享优惠券(仅标题,价格),但如果用户没有帐户,优惠券的链接实际上将重定向到注册页面。因此,当Facebook(和其他索引机器人)从优惠券URL中提取信息时,它们也会被重定向到注册页面并索引注册页面信息而不是优惠券页面信息。有什么方法可以让抓取工具为每个优惠券页面编制索引,但将实际用户重定向到注册页面?