Java类转换?

时间:2016-04-08 13:58:47

标签: java

我是Java的新手,我有一个相当简单的问题,因为我无法理解它在做什么,而在Scala中,我以前编程的编程语言,并没有"做& #34;或"有"这样的事情。

所以我们假设我们有一个名为" Pet"我的代码片段是:

Pet myPet = (Pet) myPet.getPetName();

究竟是什么

  

(PET)

在" myPet.getPetName?

前面这里做

如果有问题,请删除我的问题或将其标记为重复,但我找不到任何解决方案,因为我不知道这是怎么称呼的?

3 个答案:

答案 0 :(得分:4)

这被称为演员(而且,这可能不是你想要做的,因为我猜到一个名字是String而不是一个Pet,但我可能错了。)

在Java中,如何告诉编译器假设一个对象的类型与声明的类型不同:

public class Animal {}
public class Dog extends Animal {}

Animal pet = new Dog(); // pet is actually a Dog, but the compiler only knows that it is an Animal

Dog myBestFriend = (Dog) pet; // tell the compiler to assume that pet is really a Dog, allowing us to assign it to a Dog-typed variable.

这实际上并没有改变对象的类型 - 如果你试图将变量强制转换为实际内容以外的类型,你将获得ClassCastException

public class Cat extends Animal {}

Animal pet = new Cat(); // pet is a Cat, but the compiler only knows it as Animal

Dog myBestFriend = (Dog) pet; // this will throw ClassCastException, because pet is a Cat and Cat is not a subtype of Dog

答案 1 :(得分:1)

这是铸造。它告诉编译器你的结果应该被视为Pet类型。

答案 2 :(得分:1)

这段代码没有意义,因为很明显myPet是null。我不明白为什么宠物的名字应该再次成为宠物。 通常像(SomeClass) object之类的东西是演员。

例如,选择两个班级AnimalPet extends Animal 由于每个宠物也是动物,你可能有这样一个对象:

Animal cat = new Pet();

如果您需要在Pet但不在Animal中的cat上调用方法,则可以使用该方法:

((Pet) cat).doSomething();

如果您尝试将对象强制转换为错误类型,则会出现ClassCastException,因此您可能需要在转换之前进行检查:

if(cat instanceof Pet)...