首页 > 代码库 > 第六章:枚举和注解。ITEM34:用接口模拟可伸缩的枚举。
第六章:枚举和注解。ITEM34:用接口模拟可伸缩的枚举。
1 package com.twoslow.cha6;2 3 public interface OperationInterface {4 5 double apply(double x , double y) ;6 }
1 package com.twoslow.cha6; 2 3 public enum BaseOperation implements OperationInterface{ 4 5 PLUS("+"){ 6 public double apply(double x , double y ) {return x + y ;} 7 }, 8 MINUS("-"){ 9 public double apply(double x , double y ) {return x - y ;}10 },11 TIMES("*"){12 public double apply(double x , double y ) {return x * y ;}13 },14 DIVIDE("/"){15 public double apply(double x , double y ) {return x / y ;}16 } ;17 18 private final String symbol ;19 20 BaseOperation(String symbol) {21 this.symbol = symbol ;22 }23 }
1 package com.twoslow.cha6; 2 3 public enum ExtendedOperation implements OperationInterface{ 4 5 EXP("^") { 6 public double apply(double x, double y){return Math.pow(x, y) ;}; 7 } , 8 9 REMAINDER("%") {10 public double apply(double x , double y ) {return x % y ;} ;11 } ;12 13 14 private final String symbol ;15 16 ExtendedOperation(String symbol) {17 this.symbol = symbol ;18 }19 }
1 package com.twoslow.cha6; 2 3 import java.util.Arrays; 4 import java.util.Collection; 5 6 public class MainTest { 7 8 public static void main(String[] args) { 9 // test(ExtendedOperation.class , 3,2) ;10 11 test2(Arrays.asList(BaseOperation.values()),3,2) ;12 }13 14 //泛型声明确保对象既表示枚举又表示Operation的子类型15 private static <T extends Enum<T> & OperationInterface> void test(Class<T> opSet , double x , double y ) {16 for(OperationInterface op : opSet.getEnumConstants()) {17 System.out.println(op.apply(x, y));18 }19 }20 21 private static void test2(Collection<? extends OperationInterface> opSet , double x , double y ) {22 for(OperationInterface op : opSet) {23 System.out.println(op.apply(x, y));24 }25 }26 }
第六章:枚举和注解。ITEM34:用接口模拟可伸缩的枚举。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。