我最近在android类(Intent)中发现了以下模式:
AClass c = data.getParcelableExtra("name");
签名:
public <T extends Parcelable> T getParcelableExtra(String name)
在小径的下方有一个演员:
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; }}
调用getParcelableExtra的代码缺少强制转换令我震惊.我发现结构类似于findVIEwByID(int ID).为什么未使用以下签名实现findVIEwByID:
public <T extends VIEw> T genericsFindVIEwByID(int ID) { switch (ID){ //Bogus method body as example case 1: return (T) new TextVIEw(getActivity()); case 2: return (T) new RecyclerVIEw(getActivity()); default: return (T) new ImageVIEw(getActivity()); }}//ExamplesTextVIEw t = genericsFindVIEwByID(1);RecyclerVIEw r = genericsFindVIEwByID(2);ImageVIEw i = genericsFindVIEwByID(4);TextVIEw t2 = genericsFindVIEwByID(4); // this gives ClassCastException//But the following would as well:TextVIEw t3 = (TextVIEw) rootVIEw.findVIEwByID(R.ID.image_vIEw);
我没有问题,我只想了解为什么他们在一种情况下而不是其他情况下在androID结构中进行了内部转换?
解决方法:
这可能是由于历史原因,这些代码段不是同时编写的,决定样式时所考虑的因素也不相同,等等.
昨天在Google I / O 2017上,他们宣布将AndroID O API中的VIEw.findVIEwByID声明为public< Textend VIEw>. findVIEwByID(int ID).
如所见here:
总结以上是内存溢出为你收集整理的Android和通用模式全部内容,希望文章能够帮你解决Android和通用模式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)