我有一个超类动物和两个子类:猫和狗。Dog类有一个专属于它自己的新方法,称为playFetch()。
Animal G = new Cat("Tom");
((Dog) G).playFetch();
在运行时,我们知道会发生什么。请说服我为什么编译器不抱怨。还是我的论点正确?
强制转换总是强制转换,正确使用它取决于程序员。也许您是为了单元测试而试图生成ClassCastException(“猫永远不应该扩展狗”),或者有编译器无法理解的其他计划。因此,当您使用告诉编译器后退的特性时,编译器后退,强制转换就是这些特性之一。
(这也解释了为什么规范允许编译器这样做。)
例如如下代码: SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); Date date = sdf.parse("abcd"); 这段代码会抛出ParseException,而它是编译时异常,为什么编译阶段不报错,运行时报错?
然而,在我下面的代码中,我希望在这两个示例中都花费相同的15秒(每个任务5秒),如本文所述。然而,第二个示例只需要5秒,同时运行所有3个示例也需要5秒来完成第二个示例。原来的文章花了5秒,但我把它改成了1秒的延迟,让它更明显。 有没有人能解释一下这是怎么回事,为什么它看起来像线程一样运行?
我在一个类中有一个方法,该方法具有使用泛型指定的返回类型。 对于通用返回类型,我假设上面示例中的返回将评估为: 相反,被正确返回和打印。 如果我将调用更改为: 我错过了什么,以帮助我理解这里发生了什么,为什么原始版本没有导致编译错误。
我在这里读到了关于C默认初始化的内容。它说: 如果T是const限定类型,则它必须是具有用户提供的默认构造函数的类类型。 该链接上给出的示例是(我只显示了与我的问题相关的程序语句,其他我省略了): 但它在gcc 4.8.1上编译良好 因此,我认为成功编译上述程序的原因是结构T1中没有成员。因此,在这种情况下不会发生默认初始化。但如果我添加一个数据成员,如: 然后编译器给出适当的错误消息,如下所示:
问题内容: 我在类中有一个方法,该方法具有通过使用泛型指定的返回类型。 对于通用返回类型,我假设以上示例中的返回将计算为: 而是返回a并正确打印。 如果将调用更改为:我收到编译错误: 我缺少什么来帮助我了解这里发生了什么以及为什么原始版本没有导致编译错误。 问题答案: 这是因为重载解析解决了您的调用,因为没有。 请记住,Java的泛型会在运行时删除。像这样的演员阵容将被删除,并移至呼叫站点。有时这
此代码可编译但不运行;当我试图运行这个程序时,它会给出一个。我做错了什么?