栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

单例,枚举和匿名内部类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单例,枚举和匿名内部类

您的枚举等效于以下普通类(实际上,这几乎是编译器将其转换为的类):

public abstract class EnumPriceType {    public static final EnumPriceType WITH_TAXES = new EnumPriceType() {        //getPrice() {...}        //getFormattedPrice() {...}    };    public static final EnumPriceType WITHOUT_TAXES = new EnumPriceType() {        //getPrice() {...}    };    public abstract float getPrice(float input);    public static void main(String[] args) {        WITH_TAXES.getFormattedPrice(33f);    }}

getFormattedPrice()
方法在抽象类型上不可用,因此不能从main方法中调用。考虑如果将main方法重写为使用局部变量会发生什么:

public static void main(String[] args) {    EnumPriceType foo = EnumPriceType.WITH_TAXES;    foo.getFormattedPrice(33f);}

这不能编译,因为

getFormattedPrice()
在基类上不可用。由于
WITH_TAXES
实例是的 匿名
子类
EnumPriceType
,因此无法将局部变量定义
getFormattedPrice()
为可见方法的类型。

作为元数据观察,这是强类型语言(例如Java)和“鸭子类型”语言(例如Ruby)之间的主要区别。

getFormattedPrice()
不管
foo
变量中包含什么类型的对象,Ruby都会很高兴地调用该方法。

作为另一个元数据观察,对于相同的不同常量

enum
使用不同的集合方法没有多大意义。如果不能将所需的所有内容作为抽象(或具体)方法放在基本枚举类型上,则可能是使用了错误的工具来解决问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610130.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号