繁体   English   中英

将省略号作为参数传递给Java方法

[英]Passing elipses as an argument to java method

我有一个Java方法可以接受椭圆格式的参数。 该方法依次调用一个api,该api再次接受椭圆格式的参数:

public void myMethod(String a, String... listOfParam){

   //Method Signature of anotherAPI is anotherAPI(String input, Object ... listOfParams)

   //I call anotherAPI method as described below.
   String result = anotherAPI(a, listOfParam); 
}

但是,当我将listOfParams作为参数传递时,得到了UnsupportedOperationException

在这种情况下,请让我知道正确的方法。

编辑

我正在调用AmazonDynamoDB Java API( http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/index.html?index-all.htmladdHashOnlyPrimaryKeys方法:

客户方法如下:

public static List<Item> getAllItems(String tableName,String primaryKeyName, String ... listOfKeys){
    List<Item> itemList = null;
    System.out.println(listOfKeys.toString());
    TableKeysAndAttributes tkaa = new TableKeysAndAttributes(tableName);
    tkaa.addHashOnlyPrimaryKey(primaryKeyName, listOfKeys);
    BatchGetItemOutcome outcome = dynamoDB.batchGetItem(tkaa);
    itemList = outcome.getTableItems().get(tableName);
    return itemList;
}

我测试此方法为:

List<Item> listOfItems = AmazonDynamoDBUtil.getAllItems("myTable","data","1","2","3","4");

这是字符串类型的数据。

但是,我得到的例外是:

Exception in thread "main" java.lang.UnsupportedOperationException: value type: class [Ljava.lang.String;
        at com.amazonaws.services.dynamodbv2.document.internal.InternalUtils.toAttributeValue(InternalUtils.java:221)
        at com.amazonaws.services.dynamodbv2.document.internal.InternalUtils.toAttributeValueMap(InternalUtils.java:535)
        at com.amazonaws.services.dynamodbv2.document.internal.InternalUtils.toAttributeValueMap(InternalUtils.java:547)
        at com.amazonaws.services.dynamodbv2.document.internal.BatchGetItemImpl.doBatchGetItem(BatchGetItemImpl.java:84)
        at com.amazonaws.services.dynamodbv2.document.internal.BatchGetItemImpl.batchGetItem(BatchGetItemImpl.java:58)
        at com.amazonaws.services.dynamodbv2.document.DynamoDB.batchGetItem(DynamoDB.java:154)
        at awsdynamodb.AmazonDynamoDBUtil.getAllItems(AmazonDynamoDBUtil.java:63)

请让我知道这种方法有什么问题。

这正在工作:

public class Main {

    public static void main(String[] args) {
        myMethod("test 1");
        myMethod("test 2", "a");
        myMethod("test 3", "a", "b", "c");
    }

    public static void myMethod(String a, String... listOfParam) {
        anotherAPI(a, listOfParam);
    }

    private static void anotherAPI(String a, String... listOfParam) {
        StringBuilder sb = new StringBuilder();
        for (String p : listOfParam) {
            sb.append(p);
            sb.append(", ");
        }
        System.out.println(a + ": " + sb.toString());
    }
}

产生预期的结果:

test 1: 
test 2: a, 
test 3: a, b, c, 

从Java的角度来看, listOfParam作为String...是一个String[]数组。

该API不支持该方法调用(因此unsupported异常)。 与省略号无关。 不要调用该方法,它将不起作用。

以下代码对我来说运行良好,尽管带有警告(您可以通过将对另一个API()的调用的第二个参数强制转换为Object []来消除此警告):

public class Test
{
  public static String anotherAPI(final String a, final Object... listOfParam)
  {
    for (final Object param : listOfParam)
      System.out.println(param);

    return "Test";
  }

  public static void main(final String[] args)
  {
    myMethod("a", "This", "is", "a", "test");
  }

  public static void myMethod(final String a, final String... listOfParam)
  {
    final String result = anotherAPI(a, listOfParam);
    System.out.println(result);
  }
}

输出:

This
is
a
test
Test

我认为anotherAPI()的实现不允许您尝试执行的操作。

抱歉,我似乎在调用addHashOnlyPrimaryKey而不是addHashOnlyPrimaryKeys :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM