我正在编写一个Android应用程序,只是好奇为什么我们必须始终在Android中进行类型转换。我了解我们需要确定类型,以便我们的代码正常运行,但是也许还有其他原因吗?
范例 :
public class Navigation extends Activity {
private DrawerLayout mDrawerLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
// other irrelevant code
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
在这个问题的上下文中,我问为什么我们必须类型转换findViewById的返回值。(我也很好奇如果可以解释的话,这种类型的转换是如何完成的。)
findViewById
从文件加载资源。它返回某种View
,但是Java编译器无法知道它将是DrawerLayout
(因为它是在Java编译之外的文件中定义的)。
如果您需要将其作为DrawerLayout
代码中的a,则必须进行强制转换。这样可以确保(在运行时)它确实是这样的对象(如果不是,则将得到一个,ClassCastException
并且程序将在此时中断)。
之所以要强制转换,DrawerLayout
是因为您可能想在该类中定义的实例上调用方法。有时,仅使用更通用的超类的签名就可以了。然后,您不必强制转换。
可以肯定的findViewById
是,DrawerLayout
无论是否强制转换,返回的实例都是无关紧要的。但是,如果您不进行强制转换,那么Java将不允许您将其视为DrawerLayout
。这就是类型安全语言的要点:除非编译器可以确定对象属于某个类,否则它不会让您调用该类的方法(或访问字段)。
问题内容: 我不知道您是否认为这是一个重要问题,但我想知道。float是一个浮点数(4个字节)。double是浮点数(8个字节)。为什么我们定义双重假名铸造: 但是我们需要使用浮点数进行转换: 要么 先感谢您。 问题答案: 如果浮点文字以字母或结束,则其类型为float 。否则,其类型为,并且可以选择以字母或结尾。 浮点类型(和)也可以使用E或e(对于科学记数法),或(32位浮点文字)和或(64位
我有一个父类来处理我所有的自定义异常,父母异常。我希望所有的子异常都有一个方法来向异常添加消息。为了做到这一点,我创建了一个泛型方法,在向其添加消息后返回泛型类型的对象。我在父类方法中使用来添加消息,然后返回,但是由于该方法返回泛型类型,所以我将其转换为泛型类型T。这似乎是可行的,但是给出了警告。我的代码如下: 该行给出的警告是。这种方法似乎确实如预期的那样有效,所以我并不担心,但我想更好地理解为
问题内容: 我有以下两节课: 和: 当我运行测试时,一切都是笨拙的。如果我将类型参数化更改为: 编译器抱怨,报告: 错误:类型不兼容的整数不能转换为T number = new Integer(11); 其中T是类型变量T扩展了在方法getSomeValue(boolean)中声明的Object 它同样对Double有所抱怨。为什么? 编辑:我犯了一个错误。这实际上是有效的代码。 现在我明白了@S
考虑一个场景,我们有一个泛型方法,它应该能够返回T的空引用,因此T必须是可空的。 有点像这样: CC似乎根本不理解我们试图做什么,它抱怨取消装箱空和方法调用导致“未经证实”的警告。 有没有办法在代码契约中强制执行此约束?
问题内容: 我在一个新项目中将Swift样板代码用于Core Data。我的文件有一个定义的单一实体()和一个属性()。 我有一个看起来像这样的文件: 当我运行它时,它起作用: 我什至可以进入iOS模拟器正在使用的SQLite数据库,并确认已添加该行。 但是,当我运行与上面完全相同的代码,但使用而不是时,出现了与…行关联的错误消息,导致崩溃。如果我继续执行,则每次执行线程1时它都会到达并位于线程1
我将调用(used)的响应传递给一个类,并尝试将其强制转换到我的模型类。由于我对调用使用的是registfit,因此它在使用GSON将其转换为模型类对象之前,根据服务器的响应生成一个链接的hashmap。(这就是我所理解的,如果我错了请纠正我)。我已经附加了一个使用response对象进行调试时可以看到的图像。如何将此响应转换为我的模型类或类型对象的对象。当我试图将类型对象强制转换到活动中的模型类