Java枚举继承:是否可以以某种方式提取枚举';toString()方法到公共超类/枚举?

Java枚举继承:是否可以以某种方式提取枚举';toString()方法到公共超类/枚举?,java,inheritance,enums,Java,Inheritance,Enums,我有4个不同的类,它们有一个名为WebService的公共超类,每个超类中声明了以下枚举(具有不同的值): 是否可以以某种方式将enums的toString()方法提取到一个公共的超类/枚举?现在,我必须为每个枚举复制toString()8次…枚举是最终的,也不能从任何内容继承,所以不能。最好是重写toString()并委托给一个公共的“to stringer”实现,这样您就不必反复编写实际的实现。因为enum没有可用的继承模型,您不能从enum类扩展任何内容,因此..正如其他人所指出的,您不能

我有4个不同的类,它们有一个名为
WebService
的公共超类,每个超类中声明了以下枚举(具有不同的值):


是否可以以某种方式将enums的toString()方法提取到一个公共的超类/枚举?现在,我必须为每个枚举复制toString()8次…

枚举是最终的,也不能从任何内容继承,所以不能。最好是重写toString()并委托给一个公共的“to stringer”实现,这样您就不必反复编写实际的实现。

因为
enum
没有可用的继承模型,您不能从
enum
类扩展任何内容,因此..

正如其他人所指出的,您不能让enum从公共类继承。如果您正在做一些比示例代码中显示的更复杂的事情,那么您可以使用某种类型的helper函数,该函数在某个地方是静态的,它接收枚举并执行计算。enum可以实现一个接口,因此您可以潜在地以这种方式处理复杂的公共toString。

如果您觉得enum常量的自然显示方式应该是小写的,那么就不需要toString()。@Peter Lawrey我在想这个问题,但这不违背java编码惯例吗?(常量应该是大写)它们应该是,但第一条规则应该是to;做你认为最清楚最简单的事情。如果可以,你应该让你的枚举私有化。然后你可以省去java编码约定。我最终在
webservice
中声明了一个名为
Param
的受保护接口,它有一个方法
toString
。这是由所有枚举实现的。我还在WebService中编写了一个受静态保护的
toString
helper函数,该函数采用
Param
。您可能不需要该接口,因为所有对象(甚至枚举)上都有一个toString方法,所以您只需执行重写即可。
public class GeoPlacesService extends WebService {

public enum RequestParam {
    LOCATION, RADIUS, SENSOR, KEY;

    @Override
    public String toString() {
       return super.toString().toLowerCase();
    }
}

public enum ResponseParam {
    STATUS, LATITUDE, LONGITUDE, NAME;

    @Override
    public String toString() {
       return super.toString().toLowerCase();
    }
}
}