java 内部类enum,java – Singletons,Enums和匿名内部类

您可能知道,有些人使用Enum of 1实例声明单例,因为JVM保证总是会有一个没有并发问题的实例来处理…

那么具有多个实例的枚举呢?

我们可以说像Enum这样的东西是一种有序的单身共享共享界面吗?

为什么?

public enum EnumPriceType {

WITH_TAXES {

@Override

public float getPrice(float input) {

return input*1.20f;

}

public String getFormattedPrice(float input) {

return input*1.20f + " €";

}

},

WITHOUT_TAXES {

@Override

public float getPrice(float input) {

return input;

}

},

;

public abstract float getPrice(float input);

public static void main(String[] args) {

WITH_TAXES.getFormattedPrice(33f);

}

}

在此代码中,为什么这不起作用:

WITH_TAXES.getFormattedPrice(33F);

如果不通过公共接口就无法调用公共方法,那么声明它的兴趣是什么?

我想这就是为什么我没有看到任何语法能够为Enum的一个实例声明一个接口.

编辑:

似乎枚举实例是一种特殊的匿名类.

因此,我理解为什么你不能称之为该方法.

我的问题有点与:为什么匿名类不能实现一个接口(除了它可能已经实现的接口!)

我完全理解为什么我们不能这样做:

Vehicle veh = new Vehicle() {

public String getName() {

return "toto";

}

};

veh.getName();

(这里的getName不是覆盖)

为什么我不明白为什么我们不能用匿名类做到这一点:

Runnable veh = new Vehicle() implements Runnable {

@Override

public void run() {

System.out.println("i run!");

}

};

veh.run();

或者会产​​生同样事物的东西.

想想看:如果你不使用匿名类,你绝对可以扩展Vehicle类,然后让那个子类实现你想要的任何其他接口……

我很确定如果有可能我们能够以类型安全的方式调用WITH_TAXES.getFormattedPrice(33f),因为WITH_TAXES不是真正的EnumPriceType,但它只是EnumPriceType的子类,具有自己的接口,并且通过使用硬编码的WITH_TAXES调用WITH_TAXES.getFormattedPrice(33f),您在编译时知道您正在调用哪个EnumPriceType子项.

所以我的问题是:有什么原因导致这是不可能的吗?或者它还没有完成?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值