当前位置: 首页 > 面试题库 >

为什么Java枚举不按顺序返回属性列表?

易修洁
2023-03-14
问题内容

我正在创建一个可能更改语言的简单程序,并且将字符串数组中的myBundle.properties文件中的属性列表转换为。

这是文件myBundle.properties:

 #default
 test1=Hello1
 test2=Hello2
 test3=Hello3
 test4=Hello4
 test5=Hello5
 test6=Hello6

这是Java代码:

import java.util.*;

class BundleTest {

    BundleTest() {
        String[] s = returnStringArray(Locale.ENGLISH);
        for(int i=0; i<s.length; i++) {
            System.out.println(s[i]);
        }
    }

    private String[] returnStringArray(Locale language) {
        try {
            ResourceBundle labels = ResourceBundle.getBundle("myBundle", language);
            Enumeration<String> keys = labels.getKeys();
            Vector v = new Vector();
            String key = null;
            while (keys.hasMoreElements()) {
                v.add(keys.nextElement());
            }
            String[] s = new String[v.size()];
            for(int i=0; i<s.length; i++) {
                s[i] = (String)v.elementAt(i);
            }
            return s;
        } catch (MissingResourceException mre) {
            System.out.println("Risorse della lingua non trovate!");
            return null;
        }
    }

    public static void main(String[] args) {
        new BundleTest();
    }
}

但是,令人惊讶的是,当我执行程序时,它以随意的顺序返回了字符串。为什么枚举有这种奇怪的行为?

bash-4.1$ java BundleTest
test1
test6
test4
test5
test2
test3

问题答案:

我不知道ResourceBundle类的确切详细信息,但是在查看您的代码示例时,似乎它具有键/值对。

这表明它的内容存储在HashMap中。(再次,因为我不知道ResounrceBundle,这是一种预感)HashMap键(和值)是无序的,因为它们存储的方式很容易为给定键找到值。



 类似资料:
  • 问题内容: 我正在用Java探索枚举,看看它们如何被滥用,并且遇到了无法解释的行为。考虑以下类别: 如预期的那样,主函数中的第一条语句将显示“ WEED”。第二个将打印“ null”。但是,如果您切换它们,即 第一条语句将显示“ FELIX”,第二条语句将显示“ null”。有没有人可以解释这种现象? 作为参考,我正在运行Java(TM)SE运行时环境(内部版本1.8.0_05-b13) 问题答案

  • 问题内容: 我正在使用JavaScript将对象序列化为JSON字符串, 我注意到只有可枚举的对象属性才被序列化: [ 笔 ] 我想知道为什么会这样?我已经通过搜索MDN页面中,json2解析器文档。我找不到任何地方记录此行为。 我怀疑这是使用仅通过[[enumerable]]属性的循环(至少在情况下)的结果。可以使用类似的方法同时返回可枚举和不可枚举的属性。不过,这可能会导致序列化(由于反序列化

  • 问题内容: 是否可以将属性文件转换为枚举。 我有一个带有很多设置的属性文件。例如 开发人员必须知道密钥才能获得属性的值。而是可以做一些事情,开发人员可以在其中键入MyPropertyEnum。并且键列表将显示在IDE中,就像它显示为Enum一样 问题答案: 我经常使用属性文件+枚举组合。这是一个例子: 现在,您还需要一个属性文件(我经常将其放在src中,因此将其打包到JAR中),其属性与在枚举中使

  • 我正在编写一个简单的游戏,在其中我使用一个枚举,CommandManager,来存储关于可能的命令以及每个命令的作用的信息。此枚举的主要目的是能够打印出可用命令的菜单,以及用于检查输入并执行与该输入相关的操作。我的问题在于第二次使用,我使用switch语句根据用户的输入确定用户想要做什么。当尝试使用枚举的属性(通过getter方法)作为案例标签时,我遇到了一个编译错误。提供的错误消息是,大小写表达

  • 问题内容: 在Java 5及更高版本中,您具有foreach循环,该循环可以神奇地实现任何实现的对象: 但是,仍然没有实现,这意味着要迭代一个,您必须执行以下操作: 有谁知道为什么仍然不执行? 编辑: 为澄清起见,我不是在谈论枚举的语言概念,而是在Java API中称为“ 枚举 ” 的Java特定类。 问题答案: 枚举没有被修改为支持Iterable,因为它是一个接口,而不是一个具体的类(例如Ve