Android和通用模式

Android和通用模式,第1张

概述我最近在android类(Intent)中发现了以下模式:AClassc=data.getParcelableExtra("name");签名:public<TextendsParcelable>TgetParcelableExtra(Stringname)在小径的下方有一个演员:public<TextendsParcelable>TgetParcelable(Stringkey){unparcel(

我最近在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和通用模式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1091576.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存