Java'ya girmek için bazı açık kaynak Java projelerine bakıyorum ve çoğunun bir çeşit 'sabit' arayüze sahip olduğunu fark ediyorum.
Örneğin, processing.org'un PConstants.java adlı bir arabirimi vardır ve diğer çekirdek sınıfların çoğu bu arabirimi uygular. Arayüz, statik üyelerle dolu. Bu yaklaşımın bir nedeni var mı yoksa bu kötü bir uygulama olarak kabul ediliyor mu? Neden mantıklı olduğu yerde numaralandırmayı kullanmıyorsunuz? veya statik bir sınıfı ?
Bir tür sözde 'küresel değişkenlere' izin vermek için bir arayüz kullanmayı garip buluyorum.
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
}
platformNamesolabilir , ancak kesinlikle sabit olmadığını unutmayın. Tek sabit dizi sıfır uzunluklu dizidir. publicstaticfinal
static finalzorunlu olarak gereksiz değildir. Yalnızca finalanahtar kelimeyi içeren bir sınıf veya arabirim alanı, siz sınıfın veya arabirimin nesnelerini oluştururken o alanın ayrı örneklerini oluşturur. Kullanmak static final, her nesnenin o alan için bir bellek konumunu paylaşmasını sağlar. Başka bir deyişle, bir sınıf MyClass bir alana sahipse final String str = "Hello";, MyClass'ın N örneği için bellekte str alanının N örneği olacaktır. staticAnahtar kelimenin eklenmesi yalnızca 1 örnekle sonuçlanır.
static finalgerekli değildir, bir arayüz için fazlalıktır.