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

Java 如何在此对象中应用多态性,java,types,casting,polymorphism,message,Java,Types,Casting,Polymorphism,Message,我有以下课程 class Message{ private List content; private String messageType; public Message(String messageType, List content){ this.content = content; this.messageType = messageType; } } 好的,现在想象一下我想发送不同类型的消息。例如,消息类型为“friend

我有以下课程

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
类。或者一个简单的
字符串
,随便什么。还有更多需要使用其他对象类型的情况

这里的主要问题是:我应该如何在这里编写具有两个属性的类:

  • 第一个存储消息的类型
  • 第二个是内容本身,它应该可以是任何类型的对象
我已经读到强制转换是一种不好的做法,所以我不想将
内容
声明为对象,然后在消息类型的函数中强制转换它

我的想法:

  • 将消息声明为抽象类,然后在消息类型的函数中实现子类。这里我没有得到的是,如果我在
    Message
    类中声明一个抽象方法,比如
    getContent()
    ,我需要建立它返回的数据类型,这让我回到了主要问题。这种方法没有用,因为我需要发送
    消息
    ,而不是子类

您根本不需要
消息类型
,您可以用class定义泛型类型,并在
内容中使用它,例如:

class Message<T> {
    private List<T> content;

    public Message(List<T> content){
        this.content = content;
    }
}

这样,您就可以用不同的类型实例化
消息
类。是关于泛型类类型的文档。

您根本不需要
messageType
,您只需使用class定义泛型类型并在
内容中使用它,例如:

class Message<T> {
    private List<T> content;

    public Message(List<T> content){
        this.content = content;
    }
}
 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;
    }
    }
这样,您就可以用不同的类型实例化
消息
类。是关于泛型类类型的文档。

类消息{
 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;
    }
    }
私有列表内容; private HashMap messageType=new HashMap(); 公共消息(HashMap消息类型,列表内容){ this.content=内容; this.messageType=messageType; } }
这个代码有意义吗???

类消息{
私有列表内容;
private HashMap messageType=new HashMap();
公共消息(HashMap消息类型,列表内容){
this.content=内容;
this.messageType=messageType;
}
}

这段代码有意义吗?

您可以有一个包含适用于所有消息类型的常用方法的接口,并让所有消息实现Sendable接口

接口 消息类 枚举
您还应该有一个枚举来对所有消息类型进行分类。这将允许您确定消息类型,而无需执行
instanceof
或字符串比较。

您可以拥有一个包含适用于所有消息类型的常用方法的接口,并让所有消息实现可发送接口

接口 消息类 枚举
您还应该有一个枚举来对所有消息类型进行分类。这将允许您确定消息类型,而无需执行
instanceof
或字符串比较。

显然不是,整个类都太长了。这只是试图解释我自己的一段代码。这是一个客户机-服务器连接,客户机向服务器发送消息,然后服务器向客户机应答。显然不是,整个类太长了。这只是试图解释我自己的一段代码。这是一个客户机-服务器连接,客户机向服务器发送消息,然后服务器向客户机应答。现在我想问你,如果
messageType
帮助程序知道如何处理它,例如,如果我发送一条类型为“search”的消息,然后获取内容,该怎么办(其关键字为
字符串
)并用它在谷歌上搜索,
messageType
有意义吗?@JD0001:这意味着一个糟糕的设计。你能和我分享一些资料来正确地进行搜索吗?@JD0001你可以将类型
T
设置为泛型,并在不同的实现中覆盖该方法。现在我想问你,如果
messageType
有帮助怎么办程序需要知道如何处理它,例如,如果我发送了一条类型为“搜索”的消息,则会获取内容(其中包含一个关键字作为
字符串
)并用它在谷歌上搜索,
messageType
有意义吗?@JD0001:这意味着一个糟糕的设计。你能和我分享一些资料来正确地做这件事吗?@JD0001你可以将类型
T
设置为泛型,并在不同的实现中覆盖该方法。当涉及到“多态性”时当涉及到“多态性”时,如果你的类没有行为,它就没有任何意义。
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
}