繁体   English   中英

如何在该对象中应用多态

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM