java – 有没有办法通过使用泛型来避免instanceof?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 有没有办法通过使用泛型来避免instanceof?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1393字,纯文字阅读大概需要2分钟。
内容图文
我有一个过程,其中多个地方可以生成错误消息和成功消息,所以我想用一个类跟踪它们,然后在过程结束时,按不同的“类型”对消息进行分组.
这些方面的东西:
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<ErrorMessage> eMsg = new Message<ErrorMessage>("invalid user");
Message<FileErrorMessage> feMsg = new Message<FileErrorMessage>("file not found");
我想过使用枚举
enum MessagType { ERROR, FILE_ERROR, OK }
对于不同的班级,但我无法提出解决方案.谢谢.
解决方法:
在这种情况下你通常可以做的是make Message有一个可以被子类覆盖的函数.然后,在调用该函数时,每个子类都可以拥有自己的行为,或者它可以保留Messages的默认行为.如果没有默认值,则可以将Message设为抽象类.
然后你可以遍历列表并执行以下操作:
for (Message m : messages) {
m.function();
}
希望这是你想要的!
编辑:在回复下面的评论时,您可以执行以下操作(使用番石榴):
SetMultimap<Class, Message> messagesByType = HashMultimap.create();
for (Message m : messages) {
messagesByType.add(m.getClass(), m);
}
然后,您可以通过messagesByType执行嵌套循环,以便一次处理一个不同的类型.话虽如此,鉴于我的最初反应,我并不认为有必要做到这一点,但这是回答你的问题.
内容总结
以上是互联网集市为您收集整理的java – 有没有办法通过使用泛型来避免instanceof?全部内容,希望文章能够帮你解决java – 有没有办法通过使用泛型来避免instanceof?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。