java instanceof 泛型_java – 有没有办法通过使用泛型来避免instanceof?

  • Post author:
  • Post category:java


我有一个过程,其中多个地方可以生成错误消息和成功消息,所以我想用一个类跟踪它们,然后在过程结束时,按不同的“类型”对消息进行分组.

这些方面的东西:

public class Message {

String message;

public Message(String message) {

this.message = message;

}

}

public class ErrorMessage extends Message {};

public class FileErrorMessage extends ErrorMessage {};

public class OkMessage extends Message {};

等等. (为了清楚起见,我在派生类中跳过构造函数).我可以通过使用instanceof运算符来区分List,但我认为泛型会更优雅,但是我如何在List中区分它们?

Message eMsg = new Message(“invalid user”);

Message feMsg = new Message(“file not found”);

我想过使用枚举

enum MessagType { ERROR, FILE_ERROR, OK }

对于不同的班级,但我无法提出解决方案.谢谢.

解决方法:

在这种情况下你通常可以做的是make Message有一个可以被子类覆盖的函数.然后,在调用该函数时,每个子类都可以拥有自己的行为,或者它可以保留Messages的默认行为.如果没有默认值,则可以将Message设为抽象类.

然后你可以遍历列表并执行以下操作:

for (Message m : messages) {

m.function();

}

希望这是你想要的!

编辑:在回复下面的评论时,您可以执行以下操作(使用番石榴):

SetMultimap messagesByType = HashMultimap.create();

for (Message m : messages) {

messagesByType.add(m.getClass(), m);

}

然后,您可以通过messagesByType执行嵌套循环,以便一次处理一个不同的类型.话虽如此,鉴于我的最初反应,我并不认为有必要做到这一点,但这是回答你的问题.

标签:java,polymorphism,generics

来源: https://codeday.me/bug/20190828/1753013.html



版权声明:本文为weixin_42358733原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。