2016-04-08 3 views
0

В настоящее время я обрабатываю огромный ввод данных, включая множество значений, которые я хочу получить в геттерах для последующего использования.Enum-getter vs. Getter для каждого стата

После написания нескольких методов я задался вопросом, может быть, лучше всего использовать один метод get, с enum-классом, содержащим все возможные значения, например.

public double getStat(StatType st) { 
    if(st != null) 
     return st.getValue(); 
} 

вместо

public double getAvgReflection() { 
    return ... 
} 

public double getMaxLifesteal() { 
    return ... 
} 

Есть ли соглашение для использования любого из двух возможностей? Любые проблемы/преимущества?

Заранее благодарен!

ответ

1

«Соглашение», о котором вы спрашиваете, действительно сводится к использованию и определению ваших ценностей. Когда вы делаете значения Enums, тогда вы должны обрабатывать их как этот тип. Смысл, поля в вашем классе должны быть определены как таковые:

private MyEnum avgReflection; 
private MyEnum maxLifesteal; 
... 
public MyEnum getAvgReflection { 
    return this.avgReflection; 
} 

И так далее.

Теперь у вас могут появиться двойные значения, а эти значения являются статическими. Я не думаю, что вас беспокоят статические значения, но вместо этого, возможно, статический набор значений.

Вы тогда есть два возможных варианта: объявить все возможные параметры, как поля, или создать одно совокупное поле для хранения всех значений, а затем использовать Enum в качестве индекса:

public enum MyEnum { 
    averageReflection(0), 
    maximumLifeSteal(1); 
    private int value; 
    private MyEnum(int value) { 
     this.value = value; 
    } 
    public int getValue() { 
     return this.value; 
    } 
} 
... 
private double[] attributes = new double[100]; // arbitrary initialization 
public double getAttribute(MyEnum attribute) { 
    return this.attributes[attribute.getValue()]; 
} 

Два ограничения на использование массива (предполагая, что вы хотите примитивные значения, и вы обеспокоены производительностью) состоит в том, что все значения должны быть одного типа, а количество атрибутов будет установлено во время компиляции.

Кроме того, вы можете просто хотите использовать Map < String, двойную > или Карту < MyEnum, двойную >, или даже Карту < MyEnum, объект >. Тип карты даст вам возможность поддерживать набор динамического размера и, возможно, иметь несколько типов (с дорогостоящими издержками преобразования ваших значений).

Вы должны основывать свое решение на количестве необходимых вам атрибутов, о том, какие накладные расходы вы готовы терпеть, и ваш стиль.

2

Использование Enum maxes проще добавить новую статистику, просто добавьте константу в Enum. Но вся статистика должна вести себя одинаково, т. Е. Быть двойным в вашем примере. Что произойдет, если вы хотите добавить int stat?

+0

Спасибо! Все они являются числовыми значениями, и я не вижу новых добавленных в ближайшее время; для знания и остального, я думаю, что я бы лучше сделал раздельный getter – AscendedKitten

+0

, а целое вполне представимо как «double», поэтому проблем не было бы – Moira