草庐IT

javascript oop、instanceof 和基类

全部标签

java - 泛型 - (elements instanceof List<? extends Comparable>) 的合法替代品

我有一个唯一参数(Listelements)将元素设置为ListModel的方法,但我需要进行验证以查看通用类型是否实现了可比性,因为这样的事情:if(elementsinstanceofList)是非法的,我不知道如何进行正确的验证。更新我已经使用以下方法完成了此验证:(elements.size()>0&&elements.get(0)instanceofComparable)但我想知道是否有更清洁的解决方案,例如使用反射?提前致谢。 最佳答案 列表的通用类型是erasedatruntime.为此,您需要在方法签名中要求参数或单

java - instanceof 与泛型集合

为什么以下代码片段无法编译?if(mangoListinstanceofList){System.out.println("true");}你不知道mangoList是一个List类型。instanceof关键字只适用于原始类型。您只能使用反射来检查集合的类型。通用类型在运行前被删除。(ans)该语句可能导致将mangoList设置为List的实例。你认为哪个是正确答案? 最佳答案 正确答案是您标记为ans的答案。您将能够分辨出mangoList是一个List,但您无法获取其已删除参数的类型。剩下的选择没有意义。

java - 为什么基类(不实现 Serializable)如果它的子类实现了 Serializable,就应该没有参数构造函数?

我正在阅读接口(interface)Serializable的文档,我在其中找到以下几行:Toallowsubtypesofnon-serializableclassestobeserialized,thesubtypemayassumeresponsibilityforsavingandrestoringthestateofthesupertype'spublic,protected,and(ifaccessible)packagefields.Thesubtypemayassumethisresponsibilityonlyiftheclassitextendshasanacces

Java:当其他类已经扩展基类时如何扩展基类?

我想在apachecommonsemail中扩展一个基类,基类是Email。我只是想对.send()方法添加一些限制其他3个扩展电子邮件的类:HtmlEmail、SimpleEmail和MultiPartEmail没有用于创建这3个派生类的工厂方法。有没有一种最好的方法可以让我从基本的Email类中扩展这个方法?我能想到的就是扩展3个派生类,在每个派生类中覆盖.send(),并让它们中的每一个都调用一个公共(public)静态方法来完成.send()节流功能。 最佳答案 看起来你可以使用decoratorpattern并写例如一个T

java - 摆脱 `instanceof`

在我正在编写的基于Sprite的游戏中,二维网格中的每个字段都包含一堆Sprite。大多数情况下,最重要的是最重要的。在游戏的规则模块中,我有很多这样的代码:publicbooleanisGameWon(Boardboard){for(Pointpoint:board.getTargetPoints())if(!(board.getTopSpriteAt(point)instanceofBox))returnfalse;returntrue;}更新://Dosomething如果在每个Target顶部有一个Box则算数。我看不出如何通过简单地将doSomething()添加到Sprit

java - 使用Java的instanceOf是否符合 "program to an interface"设计原则?

如您所知,“接口(interface)编程”设计原则广泛倾向于父类(superclass)型而不是具体类型或实现。在Java程序中使用instanceof从父类(superclass)型派生具体类型是否符合原则?在我的应用程序中,Storehouse是一个抽象父类(superclass)型类,带有几个私有(private)变量和公共(public)getter和setter。ConcreteStorehouseA继承自Storehouse,有很多具体的方法和变量。ConcreteStorehouseB相似又不同。我的应用程序收到一个Storehouse。但是,Storehouse不是一

java - if (a != null && a instanceof A) ... 或者 if (a instanceof A)

对于以下条件:if(a!=null&&ainstanceofA)或if(ainstanceofA)首先检查null是否有任何优势(例如,性能方面)?两个条件的结果应该相等。 最佳答案 没有任何优势,你可以用if(ainstanceofA){}如果a为null,这将返回评估为false 关于java-if(a!=null&&ainstanceofA)...或者if(ainstanceofA),我们在StackOverflow上找到一个类似的问题: https:/

java - 为什么有人用List基类实例化一个新的ArrayList?

我经常遇到人们实例化一个新的ArrayList并将其分配给List接口(interface)的代码,如下所示:Listnames=newArrayList();这种方法背后的原因是什么? 最佳答案 将您的代码与接口(interface)的特定实现分离。这也可以帮助您转移到List的另一个实现future的界面。例如——你有Listnames=newArrayList();稍后你决定你应该使用List的一些其他实现。界面,说LinkedList所以你只需将其更改为Listnames=newLinkedList();没有任何问题。

java - 创建基类对象时的运行时多态性

请考虑以下代码。classBase{Base(){print();}voidprint(){System.out.println("Base");}}classChildextendsBase{inti=4;publicstaticvoidmain(String[]args){Basebase=newChild();base.print();}voidprint(){System.out.println(i);}}程序将打印0,4。我的理解是,将根据实际对象的类选择要执行的方法,因此在本例中是Child。因此,当Base的构造函数被调用时,Child的print方法被调用,所以这将打印

java - @Transactional 在 CDI Bean 的基类中被忽略

具有以下相当简单的代码和正确配置的基于JTA的持久性上下文:abstractclassAbstractRepository{@PersistenceContextprotectedEntityManagerem;@Transactionalpublicsynchronizedvoidpersist(Eentity){em.persist(entity);em.flush();}}@ApplicationScopedclassMyEntityRepositoryextendsAbstractRepository{}我在调用MyEntityRepository.persist()时遇到以下