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
}