如何在 Java 中将枚举转换为字符串

原文:https://www.studytonight.com/java-examples/how-to-convert-enum-to-string-in-java

在本文中,我们将把 Java 中的枚举转换为字符串enum 在 Java 中定义常量方面非常方便。枚举是一种特殊类型的数据类型,是一组预定义的常数。Java 提供了在一个地方收集常量的功能。

在 Java 中,有两种方法可以将枚举转换为字符串。

  • 使用内置的 name()方法
  • 使用内置的 toString()方法

使用内置名称()方法将枚举转换为字符串

在下面的代码中,枚举常量的所有值都存储在枚举的数组中,然后在遍历这个数组时,我们调用name()方法,该方法将以字符串格式返回相应的常量。

enum Course
{
    JAVA, ANDROID, HTML, CSS
}

public class StudyTonight {

    public static void main(String[] args) {
        // here values() method returns all the instances of Enum
        Course[] courses = Course.values();
        System.out.println("Name of All Courses");
        for(Course course: courses)
        {
            System.out.println(course.name());
        }
    }
}

所有课程名称 JAVA 安卓 HTML CSS

这是在 java 中将枚举转换为字符串的最简单的方法,但是根据 java 文档:

name()方法主要设计用于特定的情况,在这些情况下,正确性取决于获得确切的名称,这不会因版本而异。

使用内置的 to String()方法将枚举转换为字符串

在第二种方法中,我们将利用 Java 特性,它允许程序员覆盖继承的方法。通过简单的覆盖toString()方法,我们可以增加获取 String 的功能。

public class StudyTonight {
    enum Course {

        JAVA("Java"), ANDROID("Android"), HTML("HTML"), CSS("CSS");
        String course_name;
        //Constructor to define name
        Course(String course_name) {
            this.course_name = course_name;
        }
        //override the inherited method
        @Override
        public String toString() {
            return course_name;
        }
    }
    public static void main(String args[]) {
        Course[] courses = Course.values();
        System.out.println("Name of All Courses");
        for (Course course: courses) {
            System.out.println(course.toString());
        }
    }
}

所有课程名称 JAVA 安卓 HTML CSS

在这里,你要记住toString()方法必须是公开的,否则会给出这样一个错误:

错误:课程中的 toString()无法覆盖枚举字符串中的 toString(),toString()试图分配较弱的访问权限;

以上两种方法是在 Java 中将枚举转换为字符串的正确方法,但是除了这两种方法之外,还有其他方法可以做同样的事情。

类中的静态最终字符串,而不是枚举

静态最终字符串变量可以在与枚举相同的类之外访问,并且值不会改变,因此这也是直接使用字符串常量而不是枚举的另一种方式。

class ClassName{
    public static final String CONSTANT= "CONSTANT";
}

例子

它是枚举的替代,我们可以在类中声明公共静态最终字符串变量,并且它可以作为常数在类外直接访问。请看下面的例子。

class Course
{
    //declaration of all constant terms same as constants in enum
    public static final String JAVA= "Java";
    public static final String ANDROID= "Android";
    public static final String HTML= "HTML";
    public static final String CSS= "CSS";
}

public class StudyTonight
{
    public static void main(String args[])
    {
            //this print statements will print all the constants
            System.out.println(Course.JAVA);
            System.out.println(Course.ANDROID);
            System.out.println(Course.HTML);
            System.out.println(Course.CSS);
    }
}

Java Android html CSS

接口来声明常数

我们可以使用接口来声明常数。通过使用接口,我们不需要转换任何东西,因为所有的字符串都将像枚举中的常量一样公开可见。

public interface InterfaceName{
    String CONSTANT = "CONSTANT";
}

例子

这里,我们声明了一个接口,接口字符串内部声明为一个常量。我们可以使用接口名和常量名直接访问它们。

interface Course
{
    String JAVA= "Java";
    String ANDROID= "Android";
    String HTML= "HTML";
    String CSS= "CSS";
}

public class StudyTonight
{
    public static void main(String args[])
    {
            System.out.println(Course.JAVA);
            System.out.println(Course.ANDROID);
            System.out.println(Course.HTML);
            System.out.println(Course.CSS);
    }
}

Java Android html CSS

结论:

主要有两种方法toString()name(),通过这两种方法我们可以将枚举转换为字符串,但我们并不仅限于这两种方法,还有其他替代方法,如也存在的接口。