我知道我们不能调用,instanceof List<E>因为List<E>它不是一个可再生的类型.兼顾instanceof List和instanceof List<?>工作; 然而eclipse IDE建议使用instanceof List<?>.
我想知道为什么它建议使用未绑定的通配符instanceof List<?>而不是原始调用instanceof List.未绑定的通配符是否instanceof List<?>比原始调用有任何优势instanceof List?
预先感谢.
编辑1:实际上,instanceof List与instanceof List<?>编译器在编译时将擦除类型相同.但是化妆品的原因旁边,梅纳指出的,它有其他任何理由使用instanceof List<?>赞成instanceof List?
编辑2:根据Oracle的这个条目:
- instanceof/cast表达式的类型是raw
这种情况经常发生,因为javac禁止其目标类型为泛型类型的instanceof表达式; 对于强制类型转换,编译器稍微宽松一些,因为允许转换为泛型类型,但会发出警告(参见上文).无论如何,原始类型应该由无界通配符替换,因为它们具有类似的属性和子类型.
Object o = new ArrayList<String>();List<?> list_string = (List)o;//same as (List<?>)o boolean b = o instanceof List; //same as o instanceof List<?>
因此,我们可以推断,除了Mena所说的美容理由和使用genenics的限制,instanceof List并且instanceof …
我是Mockito和JUnit的新手,并尝试了解这些框架的基本单元测试。JUnit和Mockito中的大多数概念似乎都很简单易懂。但是,我陷入了timeoutMockito的困境。是否timeout在玩的Mockito同样的作用,因为它在JUnit的呢?贝娄是我的代码。
@Mock Timeoutable timeoutable;
@Test(timeout = 100)
public void testJUnitTimeout() {
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {
}
}
@Test
public void testMockitoTimeout(){
doAnswer(new Answer() {
@Override public Object answer(InvocationOnMock invocation){
try {
Thread.sleep(1000);
} catch (InterruptedException ie){
}
return null;
}
}).when(timeoutable).longOperation();
timeoutable.longOperation();
verify(timeoutable, timeout(100)).longOperation();
}
Run Code Online (Sandbox Code Playgroud)
我希望两个测试都失败。但只有testJUnitTimeout()失败。为什么第二次考试通过?
非常感谢你。