Chciałbym mieć klasę, która emuluje EnumMap, ale przechowuje wartości int zamiast jakiegoś obiektu. Teraz możesz oczywiście stworzyć mapę EnumMap, która mapuje do liczb całkowitych, ale to dużo autoboxingu, którego chciałbym uniknąć, jeśli to możliwe.Dostęp do metod .values () i .ordinal() arbitralnego wyliczenia?
Więc chciałbym klasę tak:
public class EnumIntAttributeMap
{
enum Attribute
{
Height, Weight;
}
private final int[] values;
public EnumIntAttributeMap()
{
this.values = new int[Attribute.values().length];
}
public int getValue(Attribute a)
{
return this.values[a.ordinal()];
}
public void setValue(Attribute a, int value)
{
this.values[a.ordinal()] = value;
}
}
wyjątkiem Chciałbym zrobić wersję, która jest nazwą rodzajową we wszystkich teksty stałe. Teraz, ponieważ metody .values () i .ordinal() są domyślnie dodawane przez kompilator, wydaje się, że jedynym sposobem uzyskania do nich dostępu byłaby refleksja, która pochłonęłaby wzrost wydajności, który próbuję osiągnąć, unikając auto-boxing, ale może jest coś, czego mi brakuje.
Jakieś myśli?
EDIT:
Myślę, że moje początkowe pytanie było jasne. Chciałbym klasy, która bierze (jako parametr ogólny) wyliczenie, a następnie może korzystać z tych samych operacji.
Mogę więc używać go z dowolnym wyliczeniem, bez potrzeby pisania zajęć dla każdego rodzaju wyliczenia za każdym razem. Takich jak:
enum Attribute { Height, Weight }
enum AbilityScore {Str, Dex, Con, Int, Wis, Cha}
IdealClass<Attribute> attributeVersion;
IdealClass<AbilityScore> abilityScoreVersion;
i tak dalej.
Jeśli 'wartości int' są małe, czyli w pamięci podręcznej, to nie będzie żadnej różnicy (BTW można zwiększyć rozmiar pamięci podręcznej) Jednakże, jeśli int wartości są duże, może to wartość, którą część pamięci/Śmieci. –
Widziałem, że można rozszerzyć pamięć podręczną Integer za pomocą argumentu wiersza poleceń. Czy jest jakiś sposób, aby to zrobić po uruchomieniu programu z poziomu programu? – Lokathor