Il solostatic
la cosa che può contenere i parametri di tipo è il metodo static
, che deve definire i propri parametri di tipo. Qualcosa di simile:
static <T> void staticGenericMethod(T param) { .. }
Nel tuo caso, il tipo di parametro ha un ambito di classe, è esempio legato e non ha nulla a che fare con le static
membri della classe.
Quindi, si dovrebbe sia rimuovere le static
parole chiave per ZERO
e INFINITY
o introdurre static
metodi che restituiscono ZERO
e INFINITY
. Ad esempio:
public interface TimeInterface<T> {
static <X> X getZero() {
//implementation
}
static <X> X getInfinity() {
}
}
noti che le X
tipo-parametri sono valide solo per il metodo statico corrispondenti e non sono condivisi tra la classe.
Il problema, tuttavia, con questo approccio è che non c'è modo per garantire che l'istanza tipo di parametro (T
) è lo stesso tipo di parametro del metodo statico (X
), che può causare gravi problemi quando usato in modo errato.
Si noti inoltre che i metodi static
sono consentiti nelle interfacce in Java8, quindi se si sta utilizzando una versione di ordine Java, è necessario convertire lo TimeInterface
in una classe.
fonte
2015-07-07 08:18:44
Grazie per la tua risposta dettagliata! – Frank
bellissimo esempio –