首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >可以将一个变量分配给两种类型吗?

可以将一个变量分配给两种类型吗?
EN

Stack Overflow用户
提问于 2012-06-01 02:44:47
回答 2查看 100关注 0票数 3

出于好奇,是否可以将一个变量分配给两种类型?

由于我在这件事上没有明确的技术术语,让我来澄清一下。通常你会有一个静态和动态的类型:

代码语言:javascript
代码运行次数:0
运行
复制
Animal a = new Dog();

其中动态类型必须继承静态类型:

代码语言:javascript
代码运行次数:0
运行
复制
public class Dog extends Animal {...}

但是,可以确保动态类型扩展/实现多个类型吗?

所以Dog必须扩展Animal-class并实现一个接口?

我会想像这样:

代码语言:javascript
代码运行次数:0
运行
复制
Animal [implements Happy] a = new Dog();

我很确定这只是一个疯狂的谈话,但这是可能的吗?如果没有,那么最接近的替代方案是什么?

我认为只有在确保变量是你自己创建的接口和你不能编辑的类的情况下,这才是相关的。

我能想到的一种方法是通过每次使用它时转换它来确定它的运行时:

代码语言:javascript
代码运行次数:0
运行
复制
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
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-01 02:48:10

不,这不是直接可能的。您可以考虑一些解决方法,例如:

代码语言:javascript
代码运行次数:0
运行
复制
abstract class HappyAnimal extends Animal implements Happy

然后使用该类型。当然,您的类必须扩展HappyAnimal,如果它们扩展Animal并直接实现Happy,则不会起作用。

票数 5
EN

Stack Overflow用户

发布于 2012-06-01 02:50:13

您可以通过在要签入的类或方法中声明类型参数来使用泛型:

代码语言:javascript
代码运行次数:0
运行
复制
<A extends Animal & Happy> //put in class/method declaration

...

A a = new Dog();

这将允许您在编译时进行类型检查,而无需使用任何额外的abstract类。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10839413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档