草庐IT

java - 为什么 Java 允许增加子类中 protected 方法的可见性?

abstractclassBase{protectedabstractvoida();}classChildextendsBase{@Overridepublicvoida(){//whyisthisvalid}}为什么我们不能降低能见度但可以提高它?我还需要实现模板模式,其中可见的公共(public)方法只能是基类。例子:abstractclassBase{publicvoidcallA(){//dosomeimportantstuffa();}protectedabstractvoida();}classChildextendsBase{@Overridepublicvoida()

java - 返回具有泛型的对象子类

对于一个抽象类,我想定义一个为子类返回“this”的方法:publicabstractclassFoo{...publicTeat(StringeatCake){...returnthis;}}publicclassCakeEaterextendsFoo{}我希望能够做这样的事情:CakeEaterphil=newCakeEater();phil.eat("wackycake").eat("chocolatecake").eat("bananabread");可以说香蕉面包会抛出IllegalArgumentException并显示消息“不是蛋糕!” 最佳答

java - 如何在 Intellij IDEA 的子类上下文中为重写自动完成显示方法建议?

假设我有:publicclassAextendsB{/*autocompletiondoesn'tsuggestsprotectedmethodsfromBtooverridewithCtrl+SPACE*/}我目前使用的是IntellijIDEA11.0.2。 最佳答案 右键单击A类的编辑器Pane,转到“生成...”->“覆盖方法...”。然后您将看到一个包含所有可以覆盖的方法的列表。“生成...”也可以通过键盘快捷键调用,我目前使用的是Mac,它是^N。IIRCWindows/Linux上的快捷方式是Alt-Insert。

Java - 基类和子类中的 equals 方法

我有一个简单的基类,后来由许多单独的类扩展,这些类可能会引入新的字段,但不一定。我在基类中定义了一个equals方法,但也为一些子类覆盖了它。可以在基类/子类中混合定义吗?在我的例子中,这是为了避免检查相同字段的代码重复。 最佳答案 看看"Implementingequals()ToAllowMixed-TypeComparison"来自AngelikaLanger。以下是一些问题的简要说明和可能的解决方案:平等契约说(除其他外):Itissymmetric:foranynon-nullreferencevaluesxandy,x.

java - 在 Java 中将子类设置为不可序列化

我有一个实现可序列化的类。现在我扩展了这个类,我希望这个扩展类是不可序列化的。那怎么办呢?例如。我有classAimplementsSerializable.我有classBextendsA.但我希望B类是不可序列化的。 最佳答案 您不能删除接口(interface),但可以在运行时阻止序列化:classBextendsA{privatevoidwriteObject(ObjectOutputStreamoos)throwsIOException{thrownewNotSerializableException();}}

java - Class.as子类签名

我的问题很理论化...这是Class.asSubclass(Javadoc)的签名:publicClassasSubclass(Classclazz)为什么在返回类型中使用通配符泛型?根据我对泛型的理解,更好的签名可能是:publicClassasSubclass(Classclazz)因为你肯定可以投Class更简单ClassBloch在他的书“EffectiveJava”中推荐(第137页,第28项):Donotusewildcardtypesasreturntypes.Ratherthanprovidingadditionalflexibilityforyourusers,itw

java - 如何使用 Guice 获取接口(interface)的所有实现者/子类?

使用Spring,您可以定义一个数组属性,并让Spring注入(inject)从给定类型派生的每个(@Component)类之一。在Guice中有对应的吗?或者添加此行为的扩展点? 最佳答案 这看起来像是Guice的用例MultiBinder.你可以有这样的东西:interfaceYourInterface{...}classAimplementsYourInterface{...}classBimplementsYourInterface{...}classYourModuleextendsAbstractModule{@Over

java - 内容中实现的类/子类有助于 eclipse

我想做的是:Listlist=new然后按Ctrl+Space得到ArrayList()(除其他外)出现在类型提案中。我以为我以前有这个工作,但我最近不得不重新安装并且找不到它的设置。这是EclipseJavaEEhelios,但如果需要,我可以升级到indigo。我试着寻找here寻求帮助,但没有找到我要找的信息。我已经尝试选中“默认提案种类”下的所有框(Java->编辑器->内容辅助->高级“无济于事。 最佳答案 Eclipse不知道哪个类实现了接口(interface),也不会为它拥有的所有接口(interface)加载它们。

python - 就地修改子类字符串

我有以下字符串子类:classS(str):defconc(self,next_val,delimiter=''):"""Concatenatevaluestoanexistingstring"""ifnotnext_valisNone:self=self+delimiter+next_valreturnself我希望它能按如下方式工作:>>>x=S("My")>>>x.conc("name")'Myname'>>>x'Myname'相反,我得到了这个:>>>x=S("My")>>>x.conc("name")'Myname'>>>x'My'有没有办法就地修改字符串?我认为这涉及到可变

python - 如何在 python 中使用 abstractproperty 装饰器强制子类设置属性?

我想强制一个Child类设置几个属性(实例变量),以实现我在python2.7中使用abstractproperty装饰器。这是示例代码:fromabcimportABCMeta,abstractpropertyclassParent(object):__metaclass__=ABCMeta@abstractpropertydefname(self):passclassChild1(Parent):passclassChild2(Parent):name='test'classChild3(Parent):def__init__(self):self.name='test'obj_c