Tag: polymorphism

jackson多态反序列化

jackson和类型层次结构我遇到了以下问题。 我正在序列化一个SubA类,它将Base扩展为一个String ,然后尝试将它去除它。 当然在编译时,系统不知道它是Base还是SubA所以我期待一个Base ,如果它是SubA ,之后会做一些其他的操作。 我的Base类看起来像: @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = “type”) @JsonSubTypes({ @Type(value = SubA.class, name = “SubA”) }) public class Base { protected String command; // +get +set protected String type; // +get +set } ……以及从Base派生的类: @JsonTypeName(“SubA”) public class SubA extends Base { private AnotherClass anotherClass; // +get […]

JAXB:generics的多态性

我正在尝试使用JAXB(在泽西岛内)与generics的多态性: @XmlRootElement public class Performance { @XmlAnyElement private List measurement; } @XmlJavaTypeAdapter(MeasurementAbstract.Adapter.class) public interface IMeasurement extends Serializable { D getDate(); void setDate(D date); V getValue(); void setValue(V value); } @XmlTransient @XmlAccessorType(XmlAccessType.FIELD) @XmlSeeAlso({MeasurementStringDouble.class, MeasurementStringInteger.class}) public abstract class MeasurementAbstract implements IMeasurement { @XmlElement protected D date; @XmlElement protected V value; static class Adapter extends XmlAdapter { public […]

如何使用JSF2处理多态?

我需要显示/编辑多态实体。 我的抽象类是Person 。 我的具体课程是PhysicalPerson和MoralPerson 每个具体类都有自己的自定义属性。 如何根据实体类使用适当的显示/编辑(复合)组件? 谢谢 ! 🙂

关于Java多态性和转换的问题

我有一个class级C.class级E扩展了它。 E e = new E(); C c = new C(); 为什么是 e = (E) c; 进一步审查:虽然数字转换具有与投射对象相同的语法,但是出现了一些混淆。 在任何情况下,上面都没有给出编译,而是给出了运行时错误 – 因此在某些实例中可以将类转换为子类(否则代码将无法编译)。 任何人都可以给出上述工作的例子吗? 并且: K extends M K k = new K(); ((M) k).getClass()给出K 这是为什么? 它被铸造给更一般的M ! 假设我在M和K中都执行了doIt()方法 ((M) k).doIt(); 给出M或K的doIt()? 谢谢!

麻烦制造多态失败那些开关/案例陈述

继续前面的问题( 这里和这里 ),我实现了一个基本的命令模式,创建了我的命令类并编码到一个接口,所以当使用任何命令时,调用execute()方法。 但是,我仍然发现自己无法动摇这些案例陈述:我正在读取主/决定字符串中的每个字符,字符串由随机的,重复的字符A,B,C或D组成,然后我检索相关的实现来自地图的命令并调用其execute方法。 我的设计是这样的: public interface Command { void execute(); } public class CommandA implements Command{ //implements execute() method } private Map myMap= new HashMap(); myMap.put(“A”, new CommandA); myMap.put(“B”, new CommandB); myMap.put(“C”, new CommandC); myMap.put(“D”, new CommandD); 但是,当我阅读每条指令时,我再次诉诸案例陈述: switch(instructionFromString){ case ‘A’:{myMap.get(“A”).execute(); break;} case ‘B’:{myMap.get(“B”).execute(); break;} case ‘C’:{myMap.get(“C”).execute(); break;} case ‘D’:{myMap.get(“D”).execute(); break;} 显然,在某种程度上我设法击败了多态性对案例陈述的优势。 它可能是我选择存储命令的那种数据结构吗? 它很可能是一个永久的数据结构,只需从中提取这些命令。 […]

从接口实现方法但具有不同的参数

我正在寻找一种很好的方法来获得在接口中定义但具有不同参数类型的相同方法的不同实现。 这可能吗? 为了澄清这一点,假设我有一个接口数据库和两个实现类Database1和Database2。 数据库有一个方法createNode(…)和另一个modifyNode(…)。 问题是对于Database1,createNode方法的返回类型应该是long(标识符)。 但是,对于Database2,它将是一个特定于该技术的对象(在这种情况下为OrientDB,但这并不重要,当然,它只是扩展Object的东西)。 并且两个create(…)返回类型都应该用作modifyNode(…)参数之一。 我想要做的是: `public interface Database { public Object createNode(…); public void modifyNode(Object id, …); … }` public class Database1 { @Override public Object createNode(…) { … long result = // obtain id of created node return Long.valueOf(result); } @Override public void modifyNode(Object id, …) { … // use id […]

为什么要声明一个接口然后在Java中用它实例化一个对象?

我和朋友正在学习Java。 我们今天正在研究接口,我们讨论了如何使用接口。 我朋友给我看的示例代码包含: IVehicle modeOfTransport1 = new Car(); IVehicle modeOfTransport2 = new Bike(); IVehicle是一个在汽车和自行车类中实现的接口。 定义接受IVehicle作为参数的方法时,可以使用接口方法,当运行代码时,上述对象正常工作。 然而,当您按照通常的意愿声明汽车和自行车时,这非常适用: Car modeOfTransport1 = new Car(); Bike modeOfTransport2 = new Bike(); 所以,我的问题是 – 为什么在声明和实例化modeOfTransport对象时,你会使用前一种方法而不是后者? 有关系吗?