Saya hampir selesai dengan aktivitas perhitungan yang saya kerjakan di android untuk aplikasi saya. Saya mencoba untuk membuat Enum Gender, tetapi untuk beberapa alasan mendapatkan kesalahan Sintaks, masukkan "EnumBody" untuk menyelesaikan EnumDeclaration.
public static enum Gender
{
static
{
Female = new Gender("Female", 1);
Gender[] arrayOfGender = new Gender[2];
arrayOfGender[0] = Male;
arrayOfGender[1] = Female;
ENUM$VALUES = arrayOfGender;
}
}
Saya juga mencobanya tanpa {} statis tetapi saya mendapatkan kesalahan sintaks yang sama.
Jawaban:
Di mana Anda menemukan sintaks ini? Java Enums sangat sederhana, Anda tinggal menentukan nilainya.
Jika Anda ingin lebih kompleks, Anda dapat menambahkan nilai seperti ini.
Kemudian untuk menggunakan enum, Anda akan melakukan sesuatu seperti ini:
sumber
Ada beberapa perdebatan seputar hal ini, tetapi bahkan dalam dokumen terbaru android menyarankan bahwa menggunakan enum dalam aplikasi android bukanlah ide yang bagus. Alasannya adalah karena mereka menggunakan lebih banyak memori daripada variabel konstanta statis. Berikut adalah dokumen dari halaman 2014 yang menyarankan agar tidak menggunakan enum dalam aplikasi android. http://developer.android.com/training/articles/memory.html#Overhead
Saya mengutip:
Ada beberapa tempat di mana mereka mengatakan bahwa tips ini sudah ketinggalan zaman dan tidak lagi berharga, tetapi alasan mereka terus mengulanginya, pasti ada benarnya. Menulis aplikasi android adalah sesuatu yang harus Anda jaga seringan mungkin untuk pengalaman pengguna yang lancar. Dan setiap inci kinerja sangat berarti!
sumber
Seperti yang dikomentari oleh Chris, enum membutuhkan lebih banyak memori di Android yang bertambah saat mereka terus digunakan di mana-mana. Anda harus mencoba IntDef atau StringDef , yang menggunakan anotasi sehingga compiler memvalidasi nilai yang diteruskan.
Ini juga dapat digunakan sebagai flag, memungkinkan komposisi biner (operasi OR / AND).
EDIT : Tampaknya mengubah enum menjadi int adalah salah satu pengoptimalan default di Proguard .
sumber
sumber
Menurut Video ini jika Anda menggunakan ProGuard, Anda bahkan tidak perlu memikirkan masalah kinerja Enum !!
sumber
Pendekatan yang disukai Android adalah konstanta int yang diberlakukan dengan @IntDef:
Dokumen: https://developer.android.com/studio/write/annotations.html#enum-annotations
sumber