【问题标题】:Class casting and parentheses类转换和括号
【发布时间】:2017-08-20 17:56:33
【问题描述】:

我已经多次看到以下代码建议允许片段访问其活动中的变量。

foo = ((MainActivity)this.getActivity()).getFoo();

现在,如果它看起来像:

foo = (MainActivity)this.getActivity().getFoo();

如果将其转换为 (MainActivity) 是有道理的,但是,将整个左侧括在括号中到底有什么作用?

非常感谢,

-约翰

【问题讨论】:

  • 第一个语句意味着将 getActivity 的结果转换为 MainActivity 实例,然后从该对象实例 getFoo,第二个实例,我敢肯定会给你一些奇怪的东西,如果不是类转换异常

标签: android casting fragment


【解决方案1】:

就像在数学中一样,添加括号意味着“先做这个”。在表达式中:

((MainActivity)this.getActivity()).getFoo();

我们是说先这样做:

(MainActivity)this.getActivity()

然后根据上面的结果,这样做:

.getFoo();

如果我们没有括号,

(MainActivity)this.getActivity().getFoo();

我们是说先做这个,因为转换的优先级很低:

this.getActivity().getFoo()

然后将上述结果转换为MainActivity

显然,后一个表达式不起作用,因为Activity 中没有定义getFoo,这是getActivity 返回的内容。

【讨论】:

    【解决方案2】:

    我认为这是不正确的,因为您不能在 getActivity() 上调用 getFoo(),这会返回默认的 Activity 类。您应该将其称为 ((MainActivity)this.getActivity()).getFoo();

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 2014-05-11
      • 2019-02-03
      • 1970-01-01
      相关资源
      最近更新 更多