我是Java的新手,我有一个相当简单的问题,因为我无法理解它在做什么,而在Scala中,我以前编程的编程语言,并没有"做& #34;或"有"这样的事情。
所以我们假设我们有一个名为" Pet"我的代码片段是:
Pet myPet = (Pet) myPet.getPetName();
究竟是什么
(PET)
在" myPet.getPetName?
前面这里做如果有问题,请删除我的问题或将其标记为重复,但我找不到任何解决方案,因为我不知道这是怎么称呼的?
答案 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
之类的东西是演员。
例如,选择两个班级Animal
和Pet extends Animal
由于每个宠物也是动物,你可能有这样一个对象:
Animal cat = new Pet();
如果您需要在Pet
但不在Animal
中的cat上调用方法,则可以使用该方法:
((Pet) cat).doSomething();
如果您尝试将对象强制转换为错误类型,则会出现ClassCastException,因此您可能需要在转换之前进行检查:
if(cat instanceof Pet)...