Mi piacerebbe avere un metodo compareTo che prende un Real (una classe per lavorare con numeri reali arbitrariamente grandi e precisi [beh, finché è inferiore a 2^31 di lunghezza al momento]) e un metodo compareTo che accetta un oggetto, ma Java non mi lascia e io non sono abbastanza esperto per sapere perché.Implementazione paragonabile, confronta Scontro nome: "hanno la stessa cancellazione, ma nessuno dei due sostituisce l'altro"
Ho appena provato a modificare la classe per implementare Comparable e ho ricevuto questi messaggi di errore qui sotto. Non capisco davvero cosa significano i messaggi di errore, ma so che ha qualcosa a che fare con il modo orribile in cui sto cercando di dare alla classe una certa flessibilità con tutte le diverse firme dei metodi per ogni singolo metodo che creo, e posso risolvere rimuovendo il metodo compareTo (Object other), ma preferirei tenerlo. Quindi quello che sto veramente chiedendo è: c'è un modo per far sparire questi messaggi di errore senza rimuovere il metodo compareTo (Object other) e cosa significano esattamente questi errori?
Inoltre, so che ci sono già alcune classi Java integrate come BigInteger e cose del genere per quello che sto cercando di usare questa classe, ma lo sto facendo per divertimento/soddisfazione per l'uso con Project Euler (https://projecteuler.net/).
[email protected] /cygdrive/c/Users/Jake/Documents/Java/Mathematics
$ javac Real.java
Real.java:377: error: name clash: compareTo(Real) in Real overrides a method whose erasure is the same as another method, yet neither overrides the other
public int compareTo(Real other)
^
first method: compareTo(Object) in Real
second method: compareTo(T) in Comparable
where T is a type-variable:
T extends Object declared in interface Comparable
Real.java:440: error: name clash: compareTo(Object) in Real and compareTo(T) in Comparable have the same erasure, yet neither overrides the other
public int compareTo(Object other)
^
where T is a type-variable:
T extends Object declared in interface Comparable
2 errors
Questi sono i metodi CompareTo:
@Override
public int compareTo(Real other)
{
// Logic.
}
public int compareTo(char givenValue)
{ return compareTo(new Real(givenValue)); }
public int compareTo(char[] givenValue)
{ return compareTo(new Real(givenValue)); }
public int compareTo(char[] givenValue, int offset, int count)
{ return compareTo(new Real(givenValue, offset, count)); }
public int compareTo(double givenValue)
{ return compareTo(new Real(givenValue)); }
public int compareTo(float givenValue)
{ return compareTo(new Real(givenValue)); }
public int compareTo(int givenValue)
{ return compareTo(new Real(givenValue)); }
public int compareTo(long givenValue)
{ return compareTo(new Real(givenValue)); }
public int compareTo(Object other)
{ return compareTo(new Real(other.toString())); }
e costruttori nel caso in cui ne avete bisogno:
public Real(String givenValue)
{
// Logic.
}
public Real(char givenValue)
{ this(String.valueOf(givenValue)); }
public Real(char[] givenValue)
{ this(String.valueOf(givenValue)); }
public Real(char[] givenValue, int offset, int count)
{ this(String.valueOf(givenValue, offset, count)); }
public Real(double givenValue)
{ this(String.valueOf(givenValue)); }
public Real(float givenValue)
{ this(String.valueOf(givenValue)); }
public Real(int givenValue)
{ this(String.valueOf(givenValue)); }
public Real(long givenValue)
{ this(String.valueOf(givenValue)); }
public Real(Object other)
{ this(other.toString()); }
Può noi tutta la classe mostrare? –