17

enum数据类型和Enumeration接口之间有什么区别吗?我已经在两者之间感到困惑。

我得到的答案是它们不相关,但这让我想到了另一个问题。

我们无法实例化 interface 。那么这条线有什么意义

Enumeration days = dayNames.elements();

这是包含该行的完整代码

import java.util.Vector;
import java.util.Enumeration;

public class EnumerationTester {

   public static void main(String args[]) {
      Enumeration days;
      Vector dayNames = new Vector();
      dayNames.add("Sunday");
      dayNames.add("Monday");
      dayNames.add("Tuesday");
      dayNames.add("Wednesday");
      dayNames.add("Thursday");
      dayNames.add("Friday");
      dayNames.add("Saturday");
      days = dayNames.elements();
      while (days.hasMoreElements()){
         System.out.println(days.nextElement()); 
      }
   }
}
4

4 回答 4

25

枚举是一个接口:实现Enumeration接口的对象会生成一系列元素,一次一个。对该方法的连续调用会nextElement返回该系列的连续元素。

例如,要打印 a 的所有元素Vector<E> v

for (Enumeration<E> e = v.elements(); e.hasMoreElements();)
       System.out.println(e.nextElement());

枚举是一种数据类型:枚举类型是一种特殊的数据类型,它使变量能够成为一组预定义的常量。该变量必须等于为其预定义的值之一。

例如,您可以将星期几enum类型指定为:

 public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
        THURSDAY, FRIDAY, SATURDAY 
    }

   public static void main(String[] args)
  {
     System.out.ptintln(Day.SUNDAY);  // print SUNDAY
  }

你的第二个问题:

我们无法实例化 interface 。那么这条线有什么意义

Enumeration days = dayNames.elements();

dayNames是一个Vector,一个集合就好了List。(存在差异,但这超出了问题的范围。)。但是,当daynames.elements()被调用时,它会返回 vector 组件的枚举daynames。返回的 Enumeration 对象将生成添加到此向量的所有项目。生成的第一个项目是 处的项目index 0,然后是 处的项目index 1,依此类推。

于 2013-10-18T08:47:38.950 回答
15

简而言之,Enumeration是遗留的Iterator并且Enum是一种数据类型。

于 2013-10-18T08:44:57.690 回答
4

枚举是java中的实例控制类。你可以预定义不同的风格,一个类型可以支持。例如。

public enum Direction {
    EAST, WEST, NORTH, SOUTH
} 

定义了一个名为Direction的类型,它可以是 4 种类型。不允许从它们的类型定义之外实例化这些类型。您可以在此处查看更多关于Enum 的信息。

虽然枚举是遍历集合的旧方法。它有两个方法nextElementhasMoreElements,它们更像是Iterator接口的nexthasNext方法。在像Servlet这样的旧 API中,我们仍然可以看到一些返回Enumeration的方法。例如。

Java.util.Enumeration<String> paramNames = request.getParameterNames();
于 2013-10-18T08:48:15.350 回答
1

根据 oracle文档

枚举类型是一种特殊的数据类型,它使变量能够成为一组预定义的常量。该变量必须等于为其预定义的值之一。常见示例包括指南针方向(NORTH、SOUTH、EAST 和 WEST 的值)和星期几。

枚举示例

public class EnumTest {
    Day day;

    public EnumTest(Day day) {
        this.day = day;
    }

    public void tellItLikeItIs() {
        switch (day) {
            case MONDAY:
                System.out.println("Mondays are bad.");
                break;

            case FRIDAY:
                System.out.println("Fridays are better.");
                break;

            case SATURDAY: case SUNDAY:
                System.out.println("Weekends are best.");
                break;

            default:
                System.out.println("Midweek days are so-so.");
                break;
        }
    }

    public static void main(String[] args) {
        EnumTest firstDay = new EnumTest(Day.MONDAY);
        firstDay.tellItLikeItIs();
        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
        thirdDay.tellItLikeItIs();
        EnumTest fifthDay = new EnumTest(Day.FRIDAY);
        fifthDay.tellItLikeItIs();
        EnumTest sixthDay = new EnumTest(Day.SATURDAY);
        sixthDay.tellItLikeItIs();
        EnumTest seventhDay = new EnumTest(Day.SUNDAY);
        seventhDay.tellItLikeItIs();
    }
}

输出是:

Mondays are bad.
Midweek days are so-so.
Fridays are better.
Weekends are best.
Weekends are best.

枚举

Enumeration 接口定义了可以枚举(一次获取一个)对象集合中的元素的方法。

枚举示例

import java.util.Vector;
import java.util.Enumeration;

public class EnumerationTester {

   public static void main(String args[]) {
      Enumeration days;
      Vector dayNames = new Vector();
      dayNames.add("Sunday");
      dayNames.add("Monday");
      dayNames.add("Tuesday");
      dayNames.add("Wednesday");
      dayNames.add("Thursday");
      dayNames.add("Friday");
      dayNames.add("Saturday");
      days = dayNames.elements();
      while (days.hasMoreElements()){
         System.out.println(days.nextElement()); 
      }
   }
}

输出

Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
于 2013-10-18T08:44:38.897 回答