Sono nuovo per i generici. Puoi vedere che sto ripetendo del codice dopo aver conosciuto il tipo esatto di val
, filterSmall
, filterGreat
. Voglio scrivere un codice generico per confrontare val
con i valori del filtro. Potrei scrivere qualcosa di simileJava Codice generico
private <T> boolean compareAgainstFilters(T val, T filterSmall, T filterGreat) {
if (!(filterSmall != null && filterSmall <= val)) {
return true;
}
if (!(filterGreat != null && val <= filterGreat)) {
return true;
}
return true;
}
ma al momento della compilazione, Java non saprei se l'operatore <=
è valido per il tipo T
.
Non voglio ripetere il codice, quindi come posso ottenerlo?
if (value != null) {
switch (value.getClass().getName()) {
case "java.lang.Long":
Long filterSmall = (Long) filterSmaller;
Long filterGreat = (Long) filterGreater;
Long val = (Long) value;
if (!(filterSmall != null && filterSmall <= val)) {
return true;
}
if (!(filterGreat != null && val <= filterGreat)) {
return true;
}
break;
case "java.lang.Float":
Float filterSmallFloat = (Float) filterSmaller;
Float filterGreatFloat = (Float) filterGreater;
Float valFloat = (Float) value;
if (!(filterSmallFloat != null && filterSmallFloat <= valFloat)) {
return true;
}
if (!(filterGreatFloat != null && valFloat <= filterGreatFloat)) {
return true;
}
}
}
Penso che tu abbia un piccolo bug nella tua logica: ritorni 'true' se' val' è maggiore di 'filterSmall', anche se è maggiore di' filterGreat'. Inoltre, si restituisce 'true' se' val' è minore di 'filterGreat', anche se è minore di' filterSmall'. Infine, penso che tu voglia 'return false;' se nessuna delle clausole 'if' è' true'. – Turing85
Qual è la domanda specifica per java 8? – the8472
Non ero sicuro se ci potesse essere un modo migliore per risolvere questo in Java 8. Indovina. – Kaunteya