如何在此对象中应用多态性
How to apply polymorphism in this object
我有以下class
class Message{
private List content;
private String messageType;
public Message(String messageType, List content){
this.content = content;
this.messageType = messageType;
}
}
好的,现在假设我想发送不同的消息类型。例如,消息类型 "friends"。我想存储他们的 ID 号(例如 int
)作为查找他们姓名(String
)的键。这提醒我应该使用 HashMap
class。或者一个简单的 String
,随便什么。以及其他更多我需要使用其他对象类型的情况。
这里的主要问题是:我应该如何继续编写具有两个属性的 class:
- 第一个存储消息的类型
- 其次是内容本身,应该可以是任何一种对象
我读到转换是一种不好的做法,所以我不想将 content
声明为对象,然后将其转换为消息类型的函数。
我的想法:
- 将消息声明为抽象class,然后在消息类型的函数中实现子classes。我在这里没有得到的是,如果我在
Message
class 中声明一个像 getContent()
这样的抽象方法,我需要建立它 returns 的数据类型,是什么让我回来了到主要问题。这种方式变得无用,因为我需要发送 Message
而不是 subclass.
你根本不需要messageType
,你可以用class定义一个通用类型并在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。 Here 是通用 class 类型的文档。
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
或字符串比较。
我有以下class
class Message{
private List content;
private String messageType;
public Message(String messageType, List content){
this.content = content;
this.messageType = messageType;
}
}
好的,现在假设我想发送不同的消息类型。例如,消息类型 "friends"。我想存储他们的 ID 号(例如 int
)作为查找他们姓名(String
)的键。这提醒我应该使用 HashMap
class。或者一个简单的 String
,随便什么。以及其他更多我需要使用其他对象类型的情况。
这里的主要问题是:我应该如何继续编写具有两个属性的 class:
- 第一个存储消息的类型
- 其次是内容本身,应该可以是任何一种对象
我读到转换是一种不好的做法,所以我不想将 content
声明为对象,然后将其转换为消息类型的函数。
我的想法:
- 将消息声明为抽象class,然后在消息类型的函数中实现子classes。我在这里没有得到的是,如果我在
Message
class 中声明一个像getContent()
这样的抽象方法,我需要建立它 returns 的数据类型,是什么让我回来了到主要问题。这种方式变得无用,因为我需要发送Message
而不是 subclass.
你根本不需要messageType
,你可以用class定义一个通用类型并在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。 Here 是通用 class 类型的文档。
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
或字符串比较。