如何使方法接受包含任何数据类型的对象的List

les*_*nar 5 java

我的目标是检查类型,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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

附带说明:消息列表中存在空元素可能会出现潜在问题 - 因此您可能需要在循环中检查该元素。其他潜在的陷阱是:

  • this.messages 未初始化,添加消息会抛出NullPointerException
  • 如果这是使用实例变量的单例(例如 Spring 服务)的方法,则应避免