有关JAVA类与类之间的强制类型转换,在android ViewPager里面遇到的。

下面是代码片段:@OverridepublicObjectinstantiateItem(ViewGrouparg0,intarg1){//ObjectViewPager... 下面是代码片段:

@Override
public Object instantiateItem(ViewGroup arg0, int arg1) {
//Object ViewPager;
((ViewPager)arg0).addView(mListViews.get(arg1), 0);

return mListViews.get(arg1);
}

以上是在ViewPager里面改写适配器PagerAdapter 的方法。原理我都能明白,我就是不懂这一句:
((ViewPager)arg0)
不明白为何ViewGroup类型的对象arg0要转换成ViewPager,然后再在外面加一个括号来引用本身就是ViewGroup的方法。我试了直接用arg0.addView(mListViews.get(arg1), 0);也是一样可以的,效果都一样,不知道这里为何要这么用,加这么些括号呢?请JAVA,安卓高手指教,谢谢!
主要就是不明白这里的双层括号有啥用。((ViewPager)arg0)
展开
 我来答
百度网友0adf2dfc62
2014-10-31 · TA获得超过578个赞
知道小有建树答主
回答量:553
采纳率:50%
帮助的人:215万
展开全部

有时候是不需要转的,但是有时候是必须要转的,比方说你写了一个类A,继承了ViewGroup并且重写了addView方法,但是你重写的addView方法干的事跟ViewGroup不是一件事(比如ViewGroup的addView是增加一个控件,而你重写的addView方法只是打印了一句话而已),只是凑巧名字一样了而已。你传入的对象是A,如果你不强转,那么编译能通过(因为语法没问题啊),但是运行时效果没出来,那你就得费九牛二虎之力去找问题出哪儿了。如果你加上强转呢?就会报类型转换异常,因为A跟ViewPager是没有继承关系的,那问题是不是一下就找到了呢。给你个例子运行一下就知道了。



public class Test {
    public static void main(String[] args) {
        爹 执行者 = new 小儿子();
        Test t1 = new Test();
        t1.干大活(执行者);
        t1.干小活(执行者);
    }
    
    public static void 干大活(爹 执行者) {
        //没强转,运行不报错,但活没干了
        执行者.干();
    }
    public static void 干小活(爹 执行者) {
        //强转,类型不对就报错,保证活要不被干了,要不就提示说这人不是干活的料
        ((大儿子)执行者).干();
    }
}

class 爹 {
    public void 干() {
        System.out.println("爹有祖传的方式干活,按这种方式能就能把活干完了...");
    }
}

class 大儿子 extends 爹 {
    public void 干() {
        System.out.println("大儿子有自己的干活方式,跟爹的方式不一样,但是活也干完了...");
    }
}

class 小儿子 extends 爹 {
    public void 干() {
        System.out.println("小儿子挺操蛋的,此干非彼干,正经活没干...");
    }
}
放荡不羁神经病
2014-10-31 · TA获得超过794个赞
知道小有建树答主
回答量:1580
采纳率:65%
帮助的人:582万
展开全部
1、可读性好,不然咋一看不知道这是viewpager。
2、这里目前是只做了add的操作。viewpager的功能肯定是比viewgroup更强大,也许他原来是想调用一些viewpager的方法,后来删掉了只留下这么个。
追问
那请问((ViewPager)arg0) 这里的两个括号,作用分别是什么呢?我就不明白这括号什么用。
追答
1、viewpager那个括号代表强转
2、外层的括号代表强转优先执行,再执行后边调用的方法。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
subirt
2014-10-31 · TA获得超过1876个赞
知道大有可为答主
回答量:2435
采纳率:0%
帮助的人:1253万
展开全部
这样就多此一举了,不用管,不转也一样,类型转换还浪费时间
追问
主要是我看到网上这一部分的代码,还有不少视频都是这样写的这一部分,实在是很困惑。
追答
转与不转arg0指向的都是同一个对象,除非用到ViewPager特有的方法必须转,否则可以不用转
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式