[英]How to apply polymorphism in this object
我有以下课程
class Message{
private List content;
private String messageType;
public Message(String messageType, List content){
this.content = content;
this.messageType = messageType;
}
}
Okey,现在想象我想发送不同的消息类型。 例如,消息类型为“ friends”。 我想将其ID号(例如int
)存储为查找其名称( String
)的键。 那使我想起了我应该使用HashMap
类。 或简单的String
,随便。 还有其他需要使用其他对象类型的情况。
这里的主要问题是:我应该如何在此处编写具有两个属性的类:
我已经读过,强制转换是一种不好的做法,所以我不想将content
声明为对象,然后将其强制转换为消息类型的函数。
我的想法:
Message
类中声明了类似getContent()
的抽象方法,则需要稳定返回的数据类型,这使我回到了主要问题。 因为我需要发送Message
而不是子类,所以这种方法变得无用。 您根本不需要messageType
,只需定义带有类的泛型类型并将其用于content
,例如:
class Message<T> {
private List<T> content;
public Message(List<T> content){
this.content = content;
}
}
现在,假设类型为String
,则可以执行以下操作:
Message<String> message = new Message<>(new ArrayList<String>());
这样,您可以实例化具有不同类型的Message
类。 这是有关通用类类型的文档。
class Message{
private List content;
private HashMap<String,Integer> messageType = new HashMap<String,Integer>();
public Message(HashMap messageType, List content){
this.content = content;
this.messageType = messageType;
}
}
这段代码有意义吗???
您可以具有一个接口,该接口包含适用于所有消息类型的通用方法,并使所有消息实现Sendable接口。
interface Sendable {
public String getContent();
public MessageType getMessageType();
}
public FriendMessage implements Sendable {
private String title;
private Map friends;
private messageType = MessageType.Friends;
public String getContent(){
return title+ friends.toString();
}
public MessageType getMessageType() {
return this.messageType;
}
}
public Enum MessageType {
Friends, NoFriends, Lonely
}
您还应该具有一个将所有消息类型分类的枚举。 这将使您无需执行instanceof
或字符串比较即可确定消息类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.