小编Lin*_*inh的帖子

实例List和Listof <?>之间的区别

我知道我们不能调用,instanceof List<E>因为List<E>它不是一个可再生的类型.兼顾instanceof Listinstanceof List<?>工作; 然而eclipse IDE建议使用instanceof List<?>.

我想知道为什么它建议使用未绑定的通配符instanceof List<?>而不是原始调用instanceof List.未绑定的通配符是否instanceof List<?>比原始调用有任何优势instanceof List

预先感谢.

编辑1:实际上,instanceof Listinstanceof List<?>编译器在编译时将擦除类型相同.但是化妆品的原因旁边,梅纳指出的,它有其他任何理由使用instanceof List<?>赞成instanceof List

编辑2:根据Oracle的这个条目:

  1. 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 …

java generics collections type-erasure erasure

8
推荐指数
1
解决办法
600
查看次数

Mockito超时如何工作?

我是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()失败。为什么第二次考试通过?

非常感谢你。

java junit timeout mockito

6
推荐指数
1
解决办法
9611
查看次数

标签 统计

java ×2

collections ×1

erasure ×1

generics ×1

junit ×1

mockito ×1

timeout ×1

type-erasure ×1