当前位置: 首页 > 知识库问答 >
问题:

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

颜昕
2023-03-14

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

@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
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);
}

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

共有1个答案

何建中
2023-03-14

这是因为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)

则应使用该集合作为参数。

listStackResourcesResult.setStackResourceSummaries(stackResourceSummaries); // Problem gone in this line
 类似资料:
  • 问题内容: Java中的所有数字都应为int类型。以下行在Java> 1.5中是合法的 同样的机制去和实例。但是龙的作品完全不同。以下代码给出了编译时错误 Long对长类型使用自动装箱方法,因此 我看不到为什么不能将int赋给Long变量。关于这个问题有什么想法吗? 问题答案: 我认为问题不在于泛型转换原语和包装。问题是关于将int转换为java.lang.Long和将int转换为java.lan

  • 问题内容: 我发现了一些奇怪的异常: 怎么可能呢?每个对象都可以转换为String,不是吗? 代码是: 谢谢。 问题答案: 为什么这不可能: 因为String和Integer不在同一对象层次结构中。 您尝试的转换仅在相同的层次结构中有效,例如 在这种情况下,或或将起作用。 因此,正如其他人已经提到的,要将整数转换为字符串,请使用: 或对于原始 要么 为对象。

  • 我还没有看到这个问题,这让我很惊讶。 以下内容不会编译: 然而,将此更改为强制转换对象并将其引用存储在条件语句之外的新对象中,可以解决此问题: 我的问题是,为什么Java中不允许这种行为?(特别是Java 5) 编辑:啊哈!谢谢大家。该死的现代IDE给出了模糊的错误消息。我已经开始打折了,这一次对我没有任何好处。(Netbeans警告我缺少括号和分号…)

  • 问题内容: 您可以将int隐式转换为double: 您可以将int显式转换为double: 您可以将double显式转换为int: 为什么不能将一个double隐式转换为int? : 问题答案: 的范围比宽。这就是为什么您需要显式强制转换。由于相同的原因,您不能隐式地从转换为:

  • 问题内容: 是否可以将Java对象直接转换为JsonNode-Object? 我发现解决此问题的唯一方法是将Java对象转换为String,然后转换为JsonNode: 问题答案: 从Jackson 1.6开始,您可以使用: 要么