我正在编写一个简单的游戏,许多游戏对象共享属性。我有两个可能的实现方式。第一种是使用继承,如下图所示:如您所料,粗体类是抽象类。分支是实际使用的派生类。请务必注意,这些类保存有关对象的数据,没有与它们关联的功能。例如,Troop和Vehicle有一个共同的接口(interface),它们都使用该接口(interface)来执行attack()和move()等操作。上面概述的类层次结构只是原始统计数据。此外,它们都是真正的ISA关系。第二个实现使用组合。与上面的类层次结构不同,每个抽象类都是包含某些数据成员的“模块”。所以SpecialAbility有一个名为PointsValueObj
谁能解释一下JLS§8.4.8.4中提到的“严格的default-abstract和default-default冲突规则”.它们是否在JLS中定义?我似乎找不到他们的定义。 最佳答案 我可能是错的,但这就是我对该部分的解释。“default-default”和“default-abstract”不是关键字。它们描述了与接口(interface)中的默认方法有关的两种不同的编译冲突规则。“default-default”与实现两个或多个接口(interface)的类有关,这些接口(interface)提供重写等效方法的默认实现,但不
假设我通过使用@transactions注释来使用JPA。因此,为了让任何方法在事务下运行,我添加了一个@transaction注释,BINGO我的方法在事务下运行。为了实现上述目标,我们需要为该类提供一个接口(interface),并且该实例由某个容器管理。此外,我应该始终从接口(interface)引用中调用该方法,以便代理对象可以启动事务。所以我的代码看起来像:classBar{@InjectprivateFooIfoo;...voiddoWork(){foo.methodThatRunUnderTx();}}classFooImplimplementsFooI{@Overrid
我开发了一个简单的注释界面@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public@interfaceCustomAnnotation{Stringfoo()default"foo";}然后我测试它并注释一个类@CustomAnnotationpublicclassAnnotatedClass{}并使用方法调用它publicvoidfoo(){CustomAnnotationcustomAnnotation=AnnotatedClass.class.getAnnotation(CustomAnnotation.
编辑:已解决,见下文你好,在Java中,我得到了一个可以属于任何类的对象。但是-该对象将始终必须实现一个接口(interface),因此当我调用接口(interface)定义的方法时,该对象将包含该方法。现在,当您尝试在Java中的通用对象上调用自定义方法时,打字很麻烦。我怎样才能以某种方式告诉编译器我的对象确实实现了该接口(interface),所以调用该方法是可以的。基本上,我正在寻找的是这样的东西:Object(MyInterface)obj;//Nowthecompilerknowsthatobjimplementstheinterface"MyInterface"obj.re
在Java中,有没有一种方法可以防止扩展接口(interface)。由于final不能添加到interface,我很想知道是否有办法阻止扩展接口(interface)。 最佳答案 这里的问题是概念性的。接口(interface)是用来扩展的,因为它们不能按原样使用。您可以做的是将界面放入一个包中并为其提供默认可见性。只有该包内的类才能实现该接口(interface)。但是使用该解决方案,您也失去了在该包外部使用接口(interface)的可能性,因此它不是真正的解决方案。 关于java-
我想知道,会吗JavaEE7's核心接口(interface)扩展AutoCloseable或不。(我所说的核心接口(interface)主要是指EntityManager等,但我不确定是否还有其他接口(interface)或类可能会自动关闭。)我认为他们应该,这是我假设的基础。Java6'sConnection甚至不扩展Closeable,然而Java7'sConnection扩展AutoCloseable(就像java.sql包中的其他几个接口(interface)一样)。EntityManager之类的接口(interface)是否可以扩展AutoCloseable以使其能够很好
我正在尝试使用JAXB/XJC从XSD生成一些高级Java源代码。我想要做的是:在Java上下文中,“group”和“attributeGroup”声明可以看作是“接口(interface)”声明:它们规定了一组特定的功能,这些功能由引用“group”或“attributeGroup”的类型支持。我现在正在寻找一种方法来为每个“group”/“attributeGroup”自动生成接口(interface)声明,同时在各自生成的类上生成接口(interface)实现声明。XJC中是否有插件或设置来实现这一点?您是否知道针对这种情况的任何其他解决方案? 最佳答
我有几个Java类,它们扩展了通用List接口(interface)的各种实现。他们只是记录添加到列表中的任何内容。LoggingArrayList如下所示。顾名思义,它扩展了ArrayList。LoggingLinkedList类是相同的,只是它扩展了LinkedList。我的主要目标是避免为了使用不同的基类而必须复制所有通用代码。我尽可能地坚持DRY原则(不要重复自己)。首先,请不要提出更好的日志记录方式。那根本不是我真正的应用。这只是演示我遇到的问题的简单方法。我有两个密切相关的问题。第一个是标题中的问题。如何在实现接口(interface)但不扩展另一个类的Java类中引用“s
我怎样才能让Jersey理解它应该使用具体的类而不是资源的接口(interface)?我有一个带有Status资源的工作应用程序。然后我提取了一个接口(interface)IStatus,并将所有JAX-RS注释移到那里。现在,我得到:org.glassfish.hk2.api.MultiExceptionAMultiExceptionhas1exceptions.Theyare:1.java.lang.NoSuchMethodException:Couldnotfindasuitableconstructorinresource.IStatusclass我知道这适用于RestEasy