Java 创建枚举列表?

Java 创建枚举列表?,java,enums,Java,Enums,所以我有三个枚举,我想用它们制作一个ArrayList。这是我的密码: enum Outlook { SUNNY, RAINY, CLOUDY } enum Temperature { HOT, COLD, MILD } enum Humidity { HIGH, NORMAL, LOW } 我希望我的ArrayList看起来像: {Outlook, Temperature, Humidity} [Outlook, Temperature, Humidity] 以下

所以我有三个枚举,我想用它们制作一个ArrayList。这是我的密码:

enum Outlook {
    SUNNY, RAINY, CLOUDY
}
enum Temperature {
    HOT, COLD, MILD
}
enum Humidity {
    HIGH, NORMAL, LOW
}
我希望我的ArrayList看起来像:

{Outlook, Temperature, Humidity}
[Outlook, Temperature, Humidity]
以下是我尝试过的:

ArrayList<Enum> attributes = new ArrayList<Enum>();
attributes.add(Temperature);
ArrayList attributes=new ArrayList();
属性。添加(温度);

但Eclipse已经告诉我“温度不能解析为变量”。您知道如何实现我的目标吗?

您需要指定要添加的值:

attributes.add(Temperature.HOT);
attributes.add(Temperature.COLD);

温度
单独计算为
,但如果需要枚举类型中的所有值,则
数组列表
只能包含
枚举
s(
温度.热
湿度.高
…)

。使用Enumtyp.values()

公共接口枚举接口{
公共静态枚举Outlook{
晴天、雨天、多云
}
公共静态枚举温度{
热、冷、温和
}
公共静态枚举湿度{
高、正常、低
}
}
公共类枚举{
私有静态ArrayList=新ArrayList();
公共单位(){
EnumInterface.Outlook[]outlookValues=EnumInterface.Outlook.values();
EnumInterface.Temperature[]temperatureValues=EnumInterface.Temperature.values();
EnumInterface.湿度[]湿度值=EnumInterface.湿度值();
对于(int i=0;i
我猜您想要的是枚举本身的名称,而不是它们的值。因此,请尝试以下代码:

public static void main (String[] args) throws java.lang.Exception
{
    List<Class<? extends Enum>> myEnums = new ArrayList<>();
    myEnums.add(Outlook.class);
    myEnums.add(Temperature.class);
    myEnums.add(Humidity.class);
    System.out.println(myEnums);
}

enum Outlook {
    SUNNY, RAINY, CLOUDY
}
enum Temperature {
    HOT, COLD, MILD
}
enum Humidity {
    HIGH, NORMAL, LOW
}
如果您严格需要以下内容:

{Outlook, Temperature, Humidity}
[Outlook, Temperature, Humidity]
只是不喜欢额外的
类Ideone$…
信息,然后我们可以添加一些额外的复杂性

我想循环浏览所有类(Outlook、Temp、湿度),并为每个类计算信息增益。这是一个利用给定属性(Outlook、Temp、湿度)的每个可能值的函数

一种可能是定义一个由所有属性实现的公共接口。这将允许您的信息获取功能使用相同的接口,而不考虑属性。不需要反思。例如:

interface IAttribute {
    Enum<?>[] getValues();
    String getName();
}
现在,您可以创建要传递给函数的属性列表

List<IAttribute> attributes = new ArrayList<>();
attributes.add( new OutlookAttribute() );
attributes.add( new TemperatureAttribute() );
attributes.add( new HumidityAttribute() );

啊,但我实际上希望能够遍历每个枚举,比如{Outlook,Temperature,湿度}…而不是每个枚举可以接受的特定值…那么我应该做一个类的数组列表吗?这样做的最终目标是什么?你想完成什么?我这样问是因为可能有更好/更干净的解决方案。您可能需要
List@assylias这似乎是可行的,但具体做什么呢?@gonzo我正试图收集这些枚举(我猜是它们的类)中的每一个,这样我就可以对它们中的每一个调用一个函数。基本上,我将在集合中循环,在每个…@andythonas上调用函数,我想在所有类(Outlook、Temp、湿度)中循环,并为每个类计算信息增益。这是一个利用给定属性(Outlook、Temp、湿度)的每个可能值的函数。这有意义吗?从OP的评论中[加上强调]:“我想循环所有类(Outlook、Temp、湿度),并为每个类计算信息增益。”这很完美。你介意解释一下你的arrayList类型吗?我不完全确定你说的“你的arrayList类型”到底是什么意思,但我认为你指的是这个类
List<IAttribute> attributes = new ArrayList<>();
attributes.add( new OutlookAttribute() );
attributes.add( new TemperatureAttribute() );
attributes.add( new HumidityAttribute() );
for ( IAttribute attribute : attributes ) {
   Object[] values = attribute.getValues();
   ...
   for ( Object value : values ) {
      ...
   }
   ...
}