2015-12-15 22 views
-1

我正在编写一个单元测试,我在其中存放各种类,在一个阶段,我需要返回Set的一个实例作为值。如何通过插入值来创建实例。下面是我曾尝试和获取编译错误如何在Java中创建Set <?>的实例?

private Set<?> keys; 
String[] keys1 = new String[2]; 
keys1[0] = "filter1"; 
keys1[1] = "filter2"; 
keys = new HashSet<>(Arrays.asList(keys1)); 

when(ctx.getFilter()).thenReturn(keys); 
+0

什么是'用getFilter的返回类型()',什么是您获得编译错误? – Thirler

+0

以下是编译错误: java.lang.Error:未解决的编译问题: \t该方法然后返回(Set )类型为OngoingStubbing >不适用于参数(Set ) – Anantha

回答

2

Set<?>真正的意思是“这是一个集中的某些类型的对象,但我不知道具体哪种类型的。”在情况下,当不要紧,你可以让一组任何类型的,你想 - 例如,你的情况,你在做一组字符串:

String[] keys1 = new String[2]; 
keys1[0] = "filter1"; 
keys1[1] = "filter2"; 
keys = new HashSet<String>(Arrays.asList(keys1)); 
0

假设您在测试这个方法。至少有一个错误是你不应该声明你的本地变量keysprivate

您可能遇到的另一个问题是您的问题中未提供的返回类型ctx.getFilter()。但它必须匹配keys的类型。类型Set<?>这意味着任何类型的集合都不是常见的返回类型,因为它不知道内容的类型是什么,所以你不能在不投射的情况下使用内容。

下面应该工作:

Set<?> keys; 
String[] keys1 = new String[2]; 
keys1[0] = "filter1"; 
keys1[1] = "filter2"; 
keys = new HashSet<>(Arrays.asList(keys1)); 

when(ctx.getFilter()).thenReturn(keys); 
+0

键是全局变量,它已在类级别的函数外声明。很明显,当我试图返回Set 的实例,那么返回类型将设置为,我不明白你的解决方案是不同于我的其他更改键的访问不是工作 – Anantha

相关问题