如何在此对象中应用多态性

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 声明为对象,然后将其转换为消息类型的函数。

我的想法:

你根本不需要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 或字符串比较。