gpt4 book ai didi

java - 为什么我不能在 Java 中将对象转换为集合?

转载 作者:行者123 更新时间:2023-11-30 10:28:19 26 4
gpt4 key购买 nike

我正在为一个类编写单元测试,如下所示:

@Test
void testCreateStackResources()
{
List<StackResource> stackResourceListExpected = new ArrayList<>();
StackResource stackResource = new StackResource();
stackResource.setLogicalResourceId("Sample-Logical-ID");
stackResourceListExpected.add(stackResource);
ListStackResourcesResult listStackResourcesResult = new ListStackResourcesResult();
StackResourceSummary stackResourceSummary = new StackResourceSummary();
stackResourceSummary.setLogicalResourceId("Sample-Logical-ID");
listStackResourcesResult.setStackResourceSummaries((Collection<StackResourceSummary>) stackResourceSummary); // Problem in this line
Mockito.when(amazonCloudFormation.listStackResources(Mockito.any(ListStackResourcesRequest.class))).thenReturn(listStackResourcesResult);
List<StackResource> stackResourceListResult = cloudFormationManager.createStackResources(Mockito.anyString());
Assert.assertEquals(stackResourceListExpected, stackResourceListResult);
}

现在,当我运行这段代码时,它会提示我无法将 StackResourceSummary 转换为 Java 中的集合。

java.lang.ClassCastException: com.amazonaws.services.cloudformation.model.StackResourceSummary cannot be cast to java.util.Collection

另一方面,如果我之前制作了一个数组列表,将 StackResourceSummary 的对象添加到列表中,然后运行 ​​UT,它会给我

objc[3648]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin/java (0x10d19c4c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10ea194e0). One of the two will be used. Which one is undefined.

这是非常奇怪的行为。我不知道为什么我不能将它转换到一个集合中?请帮忙。谢谢!

PS: 有一个名为 ListStackResourcesResult 的单独类,它有一个 setter,如下所示:

public void setStackResourceSummaries(java.util.Collection<StackResourceSummary> stackResourceSummaries) {
if (stackResourceSummaries == null) {
this.stackResourceSummaries = null;
return;
}

this.stackResourceSummaries = new com.amazonaws.internal.SdkInternalList<StackResourceSummary>(stackResourceSummaries);
}

我正在尝试使用上面的这种方法。

最佳答案

那是因为 StackResourceSummary 不扩展或实现与集合相关的任何内容。

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/cloudformation/model/StackResourceSummary.html

您需要做的是创建一个集合并将您的 StackResourceSummary 实例添加到其中。例如像这样:

List<StackResourceSummary> stackResourceSummaries = new ArrayList<StackResourceSummary>();
stackResourceSummaries.add(stackResourceSummary)

或者可能是这样

Arrays.asList(stackResourceSummary)

或使用像 Guava Collection 这样的第三方库。

然后您应该将该集合用作参数。

listStackResourcesResult.setStackResourceSummaries(stackResourceSummaries); // Problem gone in this line

关于java - 为什么我不能在 Java 中将对象转换为集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44714483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com