为什么可以';我不能在Java中将对象强制转换为集合吗?
我正在为一个类编写一个单元测试,如下所示:为什么可以';我不能在Java中将对象强制转换为集合吗?,java,Java,我正在为一个类编写一个单元测试,如下所示: @Test void testCreateStackResources() { List<StackResource> stackResourceListExpected = new ArrayList<>(); StackResource stackResource = new StackResource(); stackResource.setLogicalResourceId("Sample-Log
@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);
}
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
的对象添加到该列表中,然后运行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,如下所示:
@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);
}
public void setStackResourceSummaries(java.util.Collection<StackResourceSummary> stackResourceSummaries) {
if (stackResourceSummaries == null) {
this.stackResourceSummaries = null;
return;
}
this.stackResourceSummaries = new com.amazonaws.internal.SdkInternalList<StackResourceSummary>(stackResourceSummaries);
}
public void setStackResourceSummaries(java.util.Collection stackResourceSummaries){
if(stackResourceSummaries==null){
this.stackResourceSummaries=null;
返回;
}
this.stackResourceSummaries=new com.amazonaws.internal.SdkInternalList(stackResourceSummaries);
}
我试着用上面的方法 这是因为StackResourceSummary不扩展或实现与集合相关的任何内容 您需要创建一个集合,并将StackResourceSummary实例添加到其中。例如:
List<StackResourceSummary> stackResourceSummaries = new ArrayList<StackResourceSummary>();
stackResourceSummaries.add(stackResourceSummary)
或者使用第三方库,如guava collections
然后您应该使用该集合作为参数
listStackResourcesResult.setStackResourceSummaries(stackResourceSummaries); // Problem gone in this line
因为
StackResourceSummary
没有实现Collection
接口。请看我的更新。我正在尝试使用setStackResourceSummaries
。否则如何调用此方法?为什么要强制转换到集合
?StackResourceSummary
不是集合
。强制转换不会更改对象是什么。通过创建集合,将摘要添加到该集合,然后将集合传递给方法。在MacOS上,您的objc[3648]警告总是发生在我身上,可以忽略。我也按照您事先的建议做了。也就是说,首先创建一个列表,然后将stackResourceSummary
添加到其中。但这不起作用。当我运行测试时,它给出了上面帖子中描述的第二个错误。这个错误消息是一个完全不同的问题。请注意,第二个错误与代码无关。您是直接从cli(例如mvn测试)还是从ide运行测试。InteliJ似乎有一些问题