jjzjj

polymorphism

全部标签

java - 为什么在类级别不允许泛型中的 super 关键字

在泛型中classA允许但是classA不允许我不明白这一点。这听起来像是新手问题,但我深陷其中 最佳答案 引用JavaGenerics:extends,superandwildcardsexplained:Thesuperboundisnotallowedinclassdefinition.//thiscodedoesnotcompile!classForbidden{}Why?Becausesuchconstructiondoesn'tmakesense.Forexample,youcan'terasethetypeparame

java - SWIG Java 保留从 C++ 弹回的对象的类信息

好吧,有一个关键字我特意避开了标签和标题。那是“Android”,但那是因为即使该项目是在Android中,我认为我的问题与它无关,我不想吓到没有Android经验的人。所以,swig的常见问题。我在C++类中有一个虚拟方法,我通过添加director使其在Java中可重载类的功能并且有效。问题在于该方法接收一个多态参数,该参数也在Java端进行了扩展,并且在Java中的虚方法调用期间,该对象附带了所有多态信息。呈现确切的情况;我正在用C++写一个游戏引擎,我想在Java中愉快地使用它。游戏引擎有一个GameObject类,注册CollisionListeners,当碰撞引擎检测到碰撞

Java 多态性使用父类(super class)变量创建子类对象

所以我是一名学生,正在学习Java。有一个概念我很难理解,希望有人能为我阐明这一点。我的问题是关于多态性。比方说我有以下代码。Animala=newLizard("Lizzy",6);//LizardextendsAnimal据我了解,由于变量类型是Animal,a将具有Animal的所有特征。但是,由于创建的对象是Lizard,因此将使用Lizard类中的任何重写方法,而不是Animal类中的方法。这是正确的吗>另外,在创建类时会使用哪些类的构造函数?感谢您的帮助。我看起来很漂亮 最佳答案 1.FromwhatIunderstan

java - 什么@JsonTypeInfo.ID选择属性= "type.id"反序列化,JsonTypeInfo.Id.CUSTOM?

所以我的JSON看起来像这样:{"ActivityDisplayModel":{"name":"lunchwithfriends","startTime":"12:00:00","type":{"id":"MEAL","description":"Meal"},"complete":false}}我正在尝试找到让@JsonTypeInfo不再因为在type对象中包含类型参数而生我的气。当字段type是一个String而不是一个对象本身时,我已经开始工作了,但是为了以后的处理,我需要它作为一个对象。我知道以下内容不起作用,我猜有一种方法可以使用JsonTypeInfo.Id.CUSTOM

java - 检查消息类型时避免 instanceof

我有以下情况,客户端类根据它收到的消息类型执行不同的行为。我想知道是否有更好的方法来执行此操作,因为我不喜欢instanceof和if语句。我想到做的一件事是从客户端类中提取方法并将它们放入消息中。我会在IMessage接口(interface)中放置一个类似process()的方法,然后在每个具体消息类型中放置消息特定行为。这将使客户端变得简单,因为它只调用message.process()而不是检查类型。但是,唯一的问题是条件中包含的行为与对Client类中包含的数据的操作有关。因此,如果我确实在具体的消息类中实现了一个过程方法,我将不得不将它传递给客户端,我也不知道这是否真的有意

java - 对子类实例使用父类(super class)类型

我知道这个问题已经被问了很多,但我认为通常的答案远不能令人满意。给定以下类层次结构:classSuperClass{}classSubClassextendsSuperClass{}为什么人们使用这种模式来实例化子类:SuperClassinstance=newSubClass();而不是这个:SubClassinstance=newSubClass();现在,我看到的通常答案是,这是为了将instance作为参数发送给需要SuperClass实例的方法,如下所示:voidaFunction(SuperClassparam){}//somewhereelseinthecode.....

java - Collections.sort 使用什么设计模式?

当以下列方式将比较器应用于列表时,使用的是什么设计模式或这里使用的技术是什么?Collections.sort(myCollection,newComparator(){@Overridepublicintcompare(MyItemitem1,MyItemitem2){returnitem1.getId().compareTo(item2.getId());}}); 最佳答案 长话短说:Collections.sort是简单多态替换的示例,无论您是使用函数式编程还是面向对象编程来进行此替换.术语策略模式不能与多态性或函数式编程互换

java - 为什么 void 在 Java 中不是协变的?

如果我有这个界面:publicinterfaceFoo{voidbar();}为什么我不能这样实现?publicclassFooImplimplementsFoo{@OverridepublicObjectbar(){returnnewObject();}}似乎void应该与所有事物都是协变的。我错过了什么吗?编辑:我应该更清楚我正在寻找设计理由,而不是它无法编译的技术原因。让void对所有事物都协变会产生负面影响吗? 最佳答案 void仅与void协变,因为theJLSsaysso:Amethoddeclarationd1with

java - 在 java 中,我们可以将父类(super class)对象传递给子类引用吗?

在java中,我们可以将父类(superclass)对象传递给子类引用吗?我知道这是一个奇怪的问题/实际上不可行,但我想了解这背后的逻辑为什么在java中不允许。classEmployee{publicvoidmet1(){System.out.println("met1");}}classSalesPersonextendsEmployee{@Overridepublicvoidmet1(){System.out.println("newmet1");}publicvoidmet2(){System.out.println("met2");}}publicclassReference

java - 在运行时使用 Jackson 为多态添加 SubType 信息

我正在使用Jackson从JSON中解码多态类型。我正在使用类似于thispost中示例4的@JsonTypeInfo、@JsonSubTypes和@JsonTypeName注释.我的问题是,假设现在我需要其他人扩展我的代码并添加第3类:publicclassDuckextendsAnimal在原始代码库之外。我(或其他人)如何在不修改publicabstractAnimalclass的源代码(注释)的情况下添加SubType信息?更新:我被迫使用@JsonTypeName来解决POJO版本的变化。例如:packagemy.zoo;@JsonTypeInfo(use=JsonTypeI