java 枚举与泛型_Java枚举和泛型

这件事让我困扰了一段时间.以前我曾问过

questions,可能是一个不好的措辞和一个太抽象的例子.所以不清楚我实际在问什么.我会再尝试.请不要跳过结论.我期待这个问题根本不容易回答!

为什么我不能在Java中具有泛型类型参数的枚举?

问题不在于为什么不可能在语法上.我知道只是不支持.问题是:JSR为什么“忘记”或“省略”这个非常有用的功能?我无法想象与编译器有关的原因,为什么不可行.

这是我想做的事情.这在Java中是可能的.这是Java 1.4创建类型安全枚举的方法:

// A model class for SQL data types and their mapping to Java types

public class DataType implements Serializable, Comparable> {

private final String name;

private final Class type;

public static final DataType INT = new DataType("int", Integer.class);

public static final DataType INT4 = new DataType("int4", Integer.class);

public static final DataType INTEGER = new DataType("integer", Integer.class);

public static final DataType BIGINT = new DataType ("bigint", Long.class);

private DataType(String name, Class type) {

this.name = name;

this.type = type;

}

// Returns T. I find this often very useful!

public T parse(String string) throws Exception {

// [...]

}

// Check this out. Advanced generics:

public T[] parseArray(String string) throws Exception {

// [...]

}

// Even more advanced:

public DataType getArrayType() {

// [...]

}

// [ ... more methods ... ]

}

然后,您可以使用< T>在许多其他地方

public class Utility {

// Generic methods...

public static T doStuff(DataType type) {

// [...]

}

}

但这些事情是不可能的枚举:

// This can't be done

public enum DataType {

// Neither can this...

INT("int", Integer.class),

INT4("int4", Integer.class),

// [...]

}

现在,正如我所说.我知道这些东西都是这样设计的.枚举是句法糖.仿制药也是如此.实际上,编译器完成所有的工作,并将枚举转换成java.lang.Enum和泛型的子类到转换和合成方法.

但是为什么编译器不能进一步,并允许通用枚举?

编辑:

这是我期望的编译器生成的Java代码:

public class DataType extends Enum> {

// [...]

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值