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

时间:2017-06-21 21:51:05

标签: 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;
    }
}

Okey,现在想象我想发送不同的消息类型。例如,消息类型为“friends”。我想将他们的ID号(例如int)存储为找到其姓名的密钥(String)。这提醒我应该使用HashMap类。或者简单的String,无论如何。还有其他需要使用其他对象类型的情况。

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

  • 第一个存储消息类型
  • 第二个是内容本身,应该可以是任何类型的对象

我已经读过铸造是一种不好的做法,因此我不想将content声明为对象,然后将其转换为消息类型的函数。

我的想法:

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

3 个答案:

答案 0 :(得分:1)

您根本不需要app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() { ClientId = ConfigurationManager.AppSettings["GoogleClientId"], ClientSecret = ConfigurationManager.AppSettings["GoogleClientSecret"] }); ,您只需使用类定义泛型类型并在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>()); 类。 Here是关于泛型类类型的文档。

答案 1 :(得分:1)

 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;
    }
    }

这段代码是否有意义???

答案 2 :(得分:0)

您可以拥有一个接口,其中包含适用于所有消息类型的常用方法,并且所有消息都实现了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
}

您还应该有一个Enum,它会对您的所有消息类型进行分类。这将允许您确定消息类型,而无需进行instanceof或字符串比较。