Java Bundle.getParcelable()和泛型的使用

Java Bundle.getParcelable()和泛型的使用,java,android,Java,Android,我犯了一个错误,将从Bundle.getParcelable()中获得的内容传递到一个不可打包的指针中,但令我惊讶的是,编译器没有捕捉到这一点。例如: NotParcelable np = myBundle.getParcelable("key"); 我调查了该方法的来源: public <T extends Parcelable> T getParcelable(String key) { unparcel(); Object o = mMa

我犯了一个错误,将从
Bundle.getParcelable()
中获得的内容传递到一个不可打包的指针中,但令我惊讶的是,编译器没有捕捉到这一点。例如:

NotParcelable np = myBundle.getParcelable("key");
我调查了该方法的来源:

   public <T extends Parcelable> T getParcelable(String key) {
        unparcel();
        Object o = mMap.get(key);
        if (o == null) {
            return null;
        }
        try {
            return (T) o;
        } catch (ClassCastException e) {
            typeWarning(key, o, "Parcelable", e);
            return null;
        }
    }
public T getParcelable(字符串键){
unparcel();
对象o=mMap.get(键);
如果(o==null){
返回null;
}
试一试{
返回(T)o;
}catch(ClassCastException e){
类型警告(键,o,“可包裹”,e);
返回null;
}
}
两个问题:

  • 为什么编译器没有检测到错误?它不知何故忽略了一个事实,即返回的是一个可包裹的东西(代码)
  • 既然编译器没有检测到这一点,那么如果使用一种不使用泛型的方法,简单地将对象“o”铸造到一个包裹并返回它,我们不是会更好吗

  • 我无法复制-你还看到这个吗?