Groovy - 动态初始化String []

时间:2016-02-19 12:21:10

标签: arrays groovy initialization

1.Intro

我的方法在<?php $serverName = "DARSHAN\SQLEXPRESS"; // The connection will be attempted using Windows Authentication. $connectionInfo = array( "Database"=>"trail"); $conn = sqlsrv_connect( $serverName, $connectionInfo); if( $conn ) { echo "Connection established.<br />"; }else{ echo "Connection could not be established.<br />"; die( print_r( sqlsrv_errors(), true)); } ?> 内占用String[]。我在单元测试中生成了这个Map

map

不幸的是 Map<String, String[]> queryParameters = new HashMap<>(); queryParameters.put("keywords",["keywords"].toArray() ) queryParameters.put("user", ["m"].toArray() ) queryParameters.put("type", ["type"].toArray() ) 会生成一个对象数组,因此会引发异常:

toArray()

2.Current Solution

我想避免将String数组初始化为:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

这有效,但很烦人。另外,我不想更改原始的Spring / Java方法定义:

String[] keywords = ["keywords"];
queryParameters.put("keywords",keywords)

3.Question

public Page<LoggingEvent> findAll(Pageable pageable, Map<String, String[]> parameters) { 输入地图的最简洁方法是什么?

我不喜欢String Arrays

3 个答案:

答案 0 :(得分:2)

您可以使用元编程来帮助您的脚本:

Map.metaClass.asStringArrayMap = {
  delegate.collectEntries { key, value -> [(key): value as String[]] }
}

[keyword:'keywords', user:'m', type:'type'].asStringArrayMap()

答案 1 :(得分:1)

试试这个

def parameters = [
        keywords: ["keywords"],
        users: ["m"],
        type: ["type"]
    ].collectEntries {[(it.key): it.value as String[]] } as HashMap<String, String[]>

或者您也可以这样做:

 def parameters = [
         keywords: ["keywords"] as String[],
         users: ["m"] as String[],
         type: ["type"] as String[]
     ]

答案 2 :(得分:-1)

您可以按内嵌初始化内联数据

Map<String, String[]> queryParameters = new HashMap<>();
queryParameters.put("keywords",new String[]{"keyword"});
queryParameters.put("user", new String[]{"m"});
queryParameters.put("type", new String[]{"type"});