超级关键字如何与Object一起使用

时间:2015-07-18 08:54:02

标签: java object generics superclass super

使用super for Runnable接口并定义要存储的Object类型没有得到任何编译错误,但对于下面的代码MyRunnale(i)使用MyObject存储但编译器引发编译错误:类型不匹配
请解释一下为什么会出现编译错误&为什么要到那里。

class Test 
{

    public static void main(String[] args) {
        ArrayList<? super Runnable> a1 = new ArrayList<Object>();
        // Here am not getting any CTE but for the below code
        ArrayList<? super MyRunnable> a2 = new ArrayList<MyObject>();
        // compile error: Type mismatch: cannot convert from ArrayList<MyObject> to
        // ArrayList<? super MyRunnable>
    }
}

class MyObject {
}
interface MyRunnable {
}
class MyThread extends MyObject implements MyRunnable {
}

1 个答案:

答案 0 :(得分:0)

当您使用ArrayList<? super Runnable>时,这意味着ArrayList可以引用Runnable的ArryList和任何超级类型的Runnable(在这种情况下为ArrayList<Runnable>()或{{1 }})。

ArrayList<Object>()MyObject的子类型。因此,它不允许您为其分配Runnable

如果您想引用ArrayList<MyObject>(),则应使用ArrayList<MyObject>()

但请确保您满足PECS规则。