In Java, perché non esiste un metodo di istanza come bigDecimal.isGreaterThan (otherBigDecimal)?

3

Il modo attuale di sapere se un BigDecimal è maggiore di un altro è

bigDecimal.compareTo(otherBigDecimal) > 0

(o one.compareTo(another) == 1 ), ma lo trovo troppo goffo e inespressivo. bigDecimal.isGreaterThan(otherBigDecimal) è più facile da capire.

Per le persone che sono abituate a Java e sanno come funziona compareTo() , il modo attuale ha senso. Per qualcuno che ha esperienza di programmazione OO diversa da Java, presumo che dovrebbero esaminare l'API per capire in cosa consiste il numero magico in questa operazione.

Non ho visto alcun tentativo in Guava o Apache's NumberUtils per risolvere questo problema e stiamo già per raggiungere Java 9.

In sostanza, quello che sto chiedendo è, c'è qualche ragione legittima che questo modo sgraziato di confrontare BigDecimals non sia stato rifatto? (Oltre a "C'è così tanto da sistemare in Java, questa non è una priorità.")

    
posta lemuel 08.06.2016 - 05:25
fonte

1 risposta

2

A parte l'attuale:

There's so much to fix in Java, this just is not a priority.

Ce n'è un altro. Se hai isGreaterThan , significa che vuoi anche avere isLesserThan . Ciò risolverebbe i tuoi bisogni, ma non i bisogni degli sviluppatori che preferiranno cercare isSuperiorTo e isInferiorTo e rimarranno delusi quando il completamento automatico non mostra il metodo corrispondente.

Ancora più importante, che cosa fai con compareTo ? Lo rimuovi? Se sì, questo interromperà tutti il codice precedentemente scritto che utilizza questo metodo. Se lo mantieni, ora disponi di due metodi ridondanti e di due modi diversi per eseguire un'azione, mentre i thread del forum mostrano che uno di questi due approcci è migliore.

Un altro approccio sarebbe utilizzare un enum :

bigDecimal.compareTo(otherBigDecimal) == Comparison.firstIsBigger;

Tuttavia, questa modifica non è neanche retrocompatibile.

Un problema molto simile riguarda le librerie in stile JUnit. C'è sempre una scelta tra l'inclusione di un numero sempre maggiore di helper di asserzione, o mantenere la luce dell'interfaccia e lasciare che gli utenti chiederanno perché il loro metodo preferito non è stato implementato . Fondamentalmente, un framework di testing unitario deve includere assert(something) esclusivamente. Altri helper possono essere convenienti, ma se provi a rispondere ad ogni esigenza di ogni utente, il framework terminerà con migliaia di metodi, e questo sarebbe inutilizzabile.

    
risposta data 08.06.2016 - 09:59
fonte

Leggi altre domande sui tag