J'ai une interface - voici une version joliment artificielle comme exemple:
public interface Particle {
enum Charge {
POSITIVE, NEGATIVE
}
Charge getCharge();
double getMass();
etc...
}
Existe-t-il une différence dans la manière dont les implémentations de cela se comportent si j'ai défini le Charge
Enum comme statique - c'est-à-dire que cela a-t-il un effet:
public interface Particle {
static enum Charge {
POSITIVE, NEGATIVE
}
Charge getCharge();
double getMass();
etc...
}
Non, ça ne fait aucune différence. Cependant, la raison n'est pas parce que c'est une déclaration de membre à l'intérieur d'une interface, comme le dit Jon. La vraie raison est en fonction de la spécification de la langue (8,9) que
Les types d'énumités imbriqués sont implicitement statiques. Il est permis de déclarer explicitement un type d'enum imbriqué pour être statique.
À l'exemple suivant, statique ne fait aucune différence (même si nous n'avons aucune interface):
public class A {
enum E {A,B};
}
public class A {
static enum E {A,B};
}
Un autre exemple avec un -privé Enum (non implicitement public).
public class A {
private static enum E {A,B}
}
Non, ça ne fait aucune différence. Du Spécification de la langue, section 9.5 :
Les interfaces peuvent contenir des déclarations de type membre ( §8.5 ). Une déclaration de type membre dans une interface est implicitement
static
etpublic
.