所以我有三个枚举,我想用它们制作一个ArrayList。这是我的代码:
enum Outlook {
SUNNY, RAINY, CLOUDY
}
enum Temperature {
HOT, COLD, MILD
}
enum Humidity {
HIGH, NORMAL, LOW
}
我希望我的ArrayList看起来像:
{Outlook, Temperature, Humidity}
这是我尝试过的:
ArrayList<Enum> attributes = new ArrayList<Enum>();
attributes.add(Temperature);
但是Eclipse已经告诉我“温度无法解析为变量”。知道如何实现我的目标吗?
答案 0 :(得分:1)
我猜想你想要枚举本身的名字,而不是他们的价值观。因此,请尝试以下代码:
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
}
您可以看到将输出的演示here:
[class Ideone$Outlook, class Ideone$Temperature, class Ideone$Humidity]
如果您严格需要以下内容:
[Outlook, Temperature, Humidity]
并且无法获得额外的class Ideone$...
信息,我们可以添加一些额外的复杂程度。
答案 1 :(得分:1)
我想循环遍历所有类(Outlook,Temp,Humidity),并为每个类计算信息增益。这是一个利用给定属性(Outlook,Temp,Humidity)的每个可能值的函数。
一种可能性是定义由所有属性实现的公共接口。这将允许您的信息增益功能使用相同的接口,无论属性如何。并且不需要反思。例如:
interface IAttribute {
Enum<?>[] getValues();
String getName();
}
此接口作为一个整体应用于属性类,而不是特定的属性值。这是实现这一目标的一种方法。
private static final class OutlookAttribute implements IAttribute {
enum Outlook { SUNNY, RAINY, CLOUDY }
@Override
public Outlook[] getValues() { return Outlook.values(); }
@Override
public String getName() { return "Outlook"; }
}
// And similarly for Temperature and Humidity
现在,您可以创建要传递给函数的属性列表。
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 ) {
...
}
...
}
答案 2 :(得分:0)
您需要指定要添加的值:
attributes.add(Temperature.HOT);
attributes.add(Temperature.COLD);
Temperature
单独评估为class
,但您的ArrayList
只能包含Enum
s Temperature.HOT
,Humidity.HIGH
... )
答案 3 :(得分:0)
如果您需要enum typ中的所有值。使用Enumtyp.values()。
public interface EnumInterface {
public static enum Outlook {
SUNNY, RAINY, CLOUDY
}
public static enum Temperature {
HOT, COLD, MILD
}
public static enum Humidity {
HIGH, NORMAL, LOW
}
}
public class EnumImp {
private static ArrayList<Enum> list = new ArrayList<>();
public void addUnits() {
EnumInterface.Outlook[] outlookValues = EnumInterface.Outlook.values();
EnumInterface.Temperature[] temperatureValues = EnumInterface.Temperature.values();
EnumInterface.Humidity[] humidityValues = EnumInterface.Humidity.values();
for (int i = 0; i < outlookValues.length; i++) {
list.add(outlookValues[i]);
}
for (int i = 0; i < temperatureValues.length; i++) {
list.add(temperatureValues[i]);
}
for (int i = 0; i < humidityValues.length; i++) {
list.add(humidityValues[i]);
}
}
public void output() {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
public class TestEnum {
public static void main(String[] args) {
EnumImp e = new EnumImp();
e.addUnits();
e.output();
}
}