出于好奇,是否可以将一个变量分配给两种类型?
由于我在这件事上没有明确的技术术语,让我来澄清一下。通常你会有一个静态和动态的类型:
Animal a = new Dog();
其中动态类型必须继承静态类型:
public class Dog extends Animal {...}
但是,可以确保动态类型扩展/实现多个类型吗?
所以Dog
必须扩展Animal
-class并实现一个接口?
我会想像这样:
Animal [implements Happy] a = new Dog();
我很确定这只是一个疯狂的谈话,但这是可能的吗?如果没有,那么最接近的替代方案是什么?
我认为只有在确保变量是你自己创建的接口和你不能编辑的类的情况下,这才是相关的。
我能想到的一种方法是通过每次使用它时转换它来确定它的运行时:
try {
@SuppressWarnings("unused")
Animal a = (Happy) new Dog();
} catch (ClassCastException e) {
//Is not of type Happy
}
//Using a method from the Happy-interface
try {
((Happy)a).smile();
} catch (ClassCastException e) {
//Is not of type Happy
}
发布于 2012-05-31 18:48:10
不,这不是直接可能的。您可以考虑一些解决方法,例如:
abstract class HappyAnimal extends Animal implements Happy
然后使用该类型。当然,您的类必须扩展HappyAnimal
,如果它们扩展Animal
并直接实现Happy
,则不会起作用。
发布于 2012-05-31 18:50:13
您可以通过在要签入的类或方法中声明类型参数来使用泛型:
<A extends Animal & Happy> //put in class/method declaration
...
A a = new Dog();
这将允许您在编译时进行类型检查,而无需使用任何额外的abstract
类。
https://stackoverflow.com/questions/10839413
复制相似问题