我的目标是检查messages
的类型,然后相应地将它们转换为字符串并添加它们。我怎样才能做到这一点?
public void addMessages(List<?> messages) {
if (messages != null) {
if (messages instanceof String) {
for (String message : messages) {
this.messages.add(message);
}
}
}
else {
for (Object message:messages) {
this.messages.add(String.valueOf(message));
}
}
}
答案 0 :(得分:3)
你可以传入一个对象列表 - 你甚至不需要if / else,因为你总是可以在消息对象上调用“toString()”或“String.valueOf”:
public void addMessages(List<Object> messages) {
if (!CollectionUtils.isEmpty(messages)) {
for (Object message : messages) {
this.messages.add(String.valueOf(message));
}
}
}
旁注:消息列表中包含null元素可能会出现潜在问题 - 因此您可能希望在循环中检查该元素。其他潜在的陷阱是:
NullPointerException
答案 1 :(得分:2)
public void addMessages(List<Object> messages) {
这就足以让messages
持有所有类型的对象。
答案 2 :(得分:1)
您可以使用&#34; Java Generics&#34;。
实现这一目标在下面的main方法中初始化的Messages
对象将接受任何类型的对象列表。您也可以使用特定类型初始化Messages
对象。
public class Messages<T> {
private List<T> messages = new ArrayList<T>();
public void addMessages(List<T> messages) {
for (T message : messages) {
// Use String.valueOf or message.toString()
// if you would like to convert the objects to String.
}
}
public static void main(String[] args) {
Messages<Object> msg = new Messages<Object>();
msg.addMessages(/** Your List of objects of any type **/);
}
}
答案 3 :(得分:0)
这只是对nutfox答案的改进。
public void addMessages(List<?> messages) {
List<String> collect = messages.stream().map(i -> String.valueOf(i)).collect(Collectors.toList());
this.messages.addAll(collect);
}