为什么可以';我不能在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似乎有一些问题