Java 是否可能有一个类型未在方法签名中声明的有界类型变量?

Java 是否可能有一个类型未在方法签名中声明的有界类型变量?,java,android,generics,Java,Android,Generics,这个问题涉及Android示例,但这更像是一个纯Java问题 考虑以下类别: interface MyCallback { /* ... */ } class MyActivity extends Activity implements MyCallback { /* ... */ // Note to non-Android guys: Activity is a subclass of Context. } class MyAdapter { <C

这个问题涉及Android示例,但这更像是一个纯Java问题

考虑以下类别:

interface MyCallback {
    /* ... */
}

class MyActivity extends Activity implements MyCallback {
    /* ... */
    // Note to non-Android guys: Activity is a subclass of Context.
}

class MyAdapter {
    <C extends Context & MyCallback> MyAdapter(C context) {
        /* 
         * For some reason I want to delegate all instanceof-checks and
         * casts to a caller. So at this point I want to be sure
         * context is already of a proper type, hence generic parameter.
         */
    }
}
另一种选择是这样做:

adapter = createAdater(getActivity())

private <C extends Context & ListToMapCallback>
    MyAdapter createAdapter(Activity activity) {
    // check if activity is castable
    return new MyAdapter((C) activity);
}
adapter=createAdater(getActivity())
私有的
MyAdapter createAdapter(活动){
//检查活动是否可浇铸
返回新的MyAdapter((C)活动);
}
没关系,虽然有点难看。我知道这没什么大不了的,但我只是好奇在不创建新方法的情况下是否有可能实现相同的结果(由于“相同擦除”错误,我无法泛化重写的方法)


谢谢

您希望强制您传递的上下文也是MyCallback?没错。我想对构造函数进行编译时检查。我认为这是不可能的(但我可能错了)。为什么不在运行时强制执行它呢?我最终会在运行时强制执行它,但我希望它由使用该类的任何人强制执行,而不是在类构造函数体本身中强制执行。这仅仅是因为为了使用一个类,您只需要知道一个签名,而不需要担心实现,它就可以使代码更干净。
getActivity()
返回什么?出示声明。
adapter = createAdater(getActivity())

private <C extends Context & ListToMapCallback>
    MyAdapter createAdapter(Activity activity) {
    // check if activity is castable
    return new MyAdapter((C) activity);
}