Saya melihat beberapa proyek Java open source untuk masuk ke Java dan melihat banyak dari mereka memiliki semacam antarmuka 'konstanta'.
Misalnya, processing.org memiliki antarmuka yang disebut PConstants.java , dan sebagian besar kelas inti lainnya mengimplementasikan antarmuka ini. Antarmuka penuh dengan anggota statis. Apakah ada alasan untuk pendekatan ini, atau apakah ini dianggap praktik yang buruk? Mengapa tidak menggunakan enum yang masuk akal , atau kelas statis?
Saya merasa aneh menggunakan antarmuka untuk memungkinkan semacam 'variabel global' palsu.
public interface PConstants {
// LOTS OF static fields...
static public final int SHINE = 31;
// emissive (by default kept black)
static public final int ER = 32;
static public final int EG = 33;
static public final int EB = 34;
// has this vertex been lit yet
static public final int BEEN_LIT = 35;
static public final int VERTEX_FIELD_COUNT = 36;
// renderers known to processing.core
static final String P2D = "processing.core.PGraphics2D";
static final String P3D = "processing.core.PGraphics3D";
static final String JAVA2D = "processing.core.PGraphicsJava2D";
static final String OPENGL = "processing.opengl.PGraphicsOpenGL";
static final String PDF = "processing.pdf.PGraphicsPDF";
static final String DXF = "processing.dxf.RawDXF";
// platform IDs for PApplet.platform
static final int OTHER = 0;
static final int WINDOWS = 1;
static final int MACOSX = 2;
static final int LINUX = 3;
static final String[] platformNames = {
"other", "windows", "macosx", "linux"
};
// and on and on
}
platformNamesmungkin public, staticdan final, tetapi ini jelas bukan sebuah konstanta. Larik konstan hanya satu dengan panjang nol.
static finaltidak selalu berlebihan. Bidang kelas atau antarmuka dengan hanya finalkata kunci akan membuat contoh terpisah dari bidang itu saat Anda membuat objek dari kelas atau antarmuka. Menggunakan static finalakan membuat setiap objek berbagi lokasi memori untuk bidang itu. Dengan kata lain, jika sebuah kelas MyClass memiliki sebuah field final String str = "Hello";, untuk N instance dari MyClass, akan ada N instance dari field str di memori. Menambahkan statickata kunci hanya akan menghasilkan 1 contoh.
static finaltidak perlu, ini berlebihan untuk sebuah antarmuka.