neuen Datentyp (Digit) definieren

Status
Nicht offen für weitere Antworten.

automatix

Aktives Mitglied
Hallo Forum,

es ist ja in Java möglich, eigene (auf den Grunddatentypen basierende) Datentypen zu definieren. Wie erzeugt man einen neuen Datentyp, z.B. Digit (Character, der die Menge von Unicod mit dem Unidode im Ziffern-Interval repräsentiert)?

Danke.
 

André Uhres

Top Contributor
Beispiel:
Code:
/*
 * Digit.java
 */
public final class Digit implements Comparable<Digit>{
    private final char value;
    public Digit(char value) {
        if (!Character.isDigit(value)) {
            throw new IllegalArgumentException(value + " is not a Digit");
        }
        this.value = value;
    }
    public char getValue() {
        return value;
    }
    public int compareTo(Digit anotherDigit) {
        return this.value - anotherDigit.value;
    }
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Digit other = (Digit) obj;
        if (this.value != other.value) {
            return false;
        }
        return true;
    }
    public int hashCode() {
        int hash = 7;
        hash = 83 * hash + this.value;
        return hash;
    }
    public String toString() {
        return String.valueOf(value);
    }
}
 

Backwardsman

Bekanntes Mitglied
Code:
    public int hashCode() {
        int hash = 7;
        hash = 83 * hash + this.value;
        return hash;
    }
was ist denn das für eine sinnfreie funktion :-D
 

André Uhres

Top Contributor
Backwardsman hat gesagt.:
Code:
    public int hashCode() {
        int hash = 7;
        hash = 83 * hash + this.value;
        return hash;
    }
was ist denn das für eine sinnfreie funktion :-D
Frag mal die Klasse Object :idea:
 

Backwardsman

Bekanntes Mitglied
immerhin steht da nichts anderes als
Code:
return 581 + this.value;
die 581 kann man sich auch sparen... wenns wenigstens ne primzahl wäre!? ;-)
 

André Uhres

Top Contributor
Backwardsman hat gesagt.:
immerhin steht da nichts anderes als
Code:
return 581 + this.value;
die 581 kann man sich auch sparen... wenns wenigstens ne primzahl wäre!? ;-)
Von "sparen" steht nix im "general contract" von hashCode.
Aber wenn die Klasse diese drei unterscheiden soll: 111, dann muss man auch den hashCode
anpassen: hash = 83 * hash + this.size;
 

André Uhres

Top Contributor
Ark hat gesagt.:
Das Interface Comparable wäre auch nicht schlecht ... ;)
Ja, das war ein Lapsus, danke für den Hinweis :toll:
Die Methode "compareTo" war zwar da, nur das
implements Comparable<Digit>
hatte ich vergessen :wink: Hab's jetzt verbessert
 

Backwardsman

Bekanntes Mitglied
mir ist schon klar, dass der hashCode für unterschiedliche objekte mit gleichem value gleichsein muss. mir ging es nur darum, dass man sich die 581 in soweit sparen, kann, dass man auch gleich das value zurückgeben kann. genau so gut, könnte man eine x-beliebige zahl drauf addieren, subtrahieren oder sonst was damit machen. fand es nur sinnfrei, wie die 581 "zusammengebastelt" wird ;-)
 

André Uhres

Top Contributor
Backwardsman hat gesagt.:
mir ist schon klar, dass der hashCode für unterschiedliche objekte mit gleichem value gleichsein muss. mir ging es nur darum, dass man sich die 581 in soweit sparen, kann, dass man auch gleich das value zurückgeben kann. genau so gut, könnte man eine x-beliebige zahl drauf addieren, subtrahieren oder sonst was damit machen. fand es nur sinnfrei, wie die 581 "zusammengebastelt" wird ;-)
Das Beispiel zeigt einfach nur eine allgemein bewährte Vorgehensweise für hashCode.
Da das nur ein Beispiel ist (möglicherweise nicht komplett für die wirkliche Klasse) wurde auf Optimierung verzichtet.
 

Ark

Top Contributor
Wenn die Werte, die Gleichheit ausmachen, in 32 Bit passen, sollte die Implementierung einfach sein, wie auch in diesem Fall:

Code:
public int hashCode(){
    return value;
}
Dazu noch meine übliche Bauweise von equals() in Konformität mit compareTo():
Code:
public boolean equals(Object o){
    if(o instanceof Digit) return compareTo((Digit)o)==0;
    return false;
}
Ark
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
1 Neuen Datentyp für rationale Zahlen als Klasse entwickeln Java Basics - Anfänger-Themen 20
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
A JTextArea entfernen und durch neuen Text ersetzen Java Basics - Anfänger-Themen 8
L Ordner in neuen erstellten Ordner erstellen Java Basics - Anfänger-Themen 12
B Grundsatzfragen zu meinem neuen Projekt Einnahmen-Ausgaben App Java Basics - Anfänger-Themen 8
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
N Wie lerne ich neuen Code zu benutzen? Java Basics - Anfänger-Themen 6
M Erste Schritte Neuen Frame nur einmal offen haben Java Basics - Anfänger-Themen 6
B MySQL starten / stoppen -> Stoppen erzeugt neuen Prozess Java Basics - Anfänger-Themen 0
W Klassen [GELÖST] Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren Java Basics - Anfänger-Themen 2
J Variablen String neuen Wert zuwesein Java Basics - Anfänger-Themen 6
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
O Java Erzeugung von neuen Objekten Java Basics - Anfänger-Themen 1
M Neuen Ordner im Überverzeichnis erstellen, und dadrin arbeiten Java Basics - Anfänger-Themen 4
S Wie bestehende Excel-Einträge mit neuen Vergleichen (mit Apache POI)? Java Basics - Anfänger-Themen 0
J Int Array und String in einer neuen Methoder übergeben Java Basics - Anfänger-Themen 7
T Alte Einträge im Array werden von neuen überschrieben Java Basics - Anfänger-Themen 5
kaoZ Android Programmierung / Erstellen einer neuen Instanz Java Basics - Anfänger-Themen 2
R Problem beim erstellen eines neuen Klassenobjekts Java Basics - Anfänger-Themen 2
T Threads Neuen Thread nicht aus main-Methode starten Java Basics - Anfänger-Themen 3
C Probleme mit neuen Objekten Java Basics - Anfänger-Themen 3
L warum werden nicht die neuen Point Daten der Zeile 25 beim ausprinten Zeile 28 übernommen ? Java Basics - Anfänger-Themen 8
J Klassen wie würde das in einer neuen class aussehen Java Basics - Anfänger-Themen 6
F erstellen einer neuen methode für das Zeichenfenster Java Basics - Anfänger-Themen 4
S Input/Output Neuen InputStream System.in setzen Java Basics - Anfänger-Themen 11
J Datentypen List - gleiche Einträge bei neuen Objekten Java Basics - Anfänger-Themen 31
J neuen jFrame öffnen per buttonklick Java Basics - Anfänger-Themen 3
R Button soll neuen Frame öffnen Java Basics - Anfänger-Themen 21
K Methode überschreiben - neuen Fehler Werfen? Java Basics - Anfänger-Themen 6
S Einen neuen String ohne Array oder List erzeugen??? Java Basics - Anfänger-Themen 13
E Keine neuen Beiträge Mit JavaMachine Datei vom Host in den Ram des Host laden. Java Basics - Anfänger-Themen 4
L Bei Click Neuen Tab Fenster öffnen Java Basics - Anfänger-Themen 8
L Textzeilen nach 2 Wörtern untersuchen wenn vorhanden Zeile in neuen Text ausgeben wenn nicht löschen Java Basics - Anfänger-Themen 10
R Array eines neuen Typen erstellen und befüllen Java Basics - Anfänger-Themen 2
I Integer neuen wert zuweisen Java Basics - Anfänger-Themen 2
I Color-Objekt neuen Wert zuweisen Java Basics - Anfänger-Themen 3
O Neuen Blackberry 8800 oder Curve gegen kleines Programm Java Basics - Anfänger-Themen 9
A Zeichen selektiv in einen neuen StringBuffer speichern Java Basics - Anfänger-Themen 2
H wie spreche ich durch leerzeichen im string neuen index an Java Basics - Anfänger-Themen 10
V In einem Fenster ein neuen Fenster öffnen. Java Basics - Anfänger-Themen 4
P class in neuen Thread auslagern Java Basics - Anfänger-Themen 3
L Variable eines neuen Objekts belegen Java Basics - Anfänger-Themen 2
E Von einem JDialog einen neuen JDialog aufrufen Java Basics - Anfänger-Themen 10
D Probleme nach Einbindung einens neuen Packages Java Basics - Anfänger-Themen 5
Y Neuen Datentypen erstellen Java Basics - Anfänger-Themen 12
M deprecated / veraltet - Wo kann man die "Neuen" fi Java Basics - Anfänger-Themen 10
S brauche hilfe mit neuen Scanner Klasse Java Basics - Anfänger-Themen 17
G Probelm mit Runtime exec! Erstellen einer neuen Konsole. Java Basics - Anfänger-Themen 2
F Neuen Pfad anlegen Java Basics - Anfänger-Themen 3
F Datentypen Wertebereiche passender Datentyp Java Basics - Anfänger-Themen 5
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
H Datentyp mit 3 Zuständen Java Basics - Anfänger-Themen 42
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
A Datentyp char Java Basics - Anfänger-Themen 27
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
T Datentyp mit Anführungszeichen drinnen Java Basics - Anfänger-Themen 3
R Datentypen Datentyp String lenght & charAT Java Basics - Anfänger-Themen 4
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
B Datentypen Datentyp welcher den gleichen Namen wie die Klasse trägt? Java Basics - Anfänger-Themen 1
D Datentypen Welcher ist der beste Datentyp? Java Basics - Anfänger-Themen 28
F Datentypen Missverständnis Datentyp Java Basics - Anfänger-Themen 2
D Rechnen mit numerischen Datentyp Frage Java Basics - Anfänger-Themen 16
E Klassename als Datentyp??? Java Basics - Anfänger-Themen 4
F Wertebereich/Datentyp Java Basics - Anfänger-Themen 26
M Datentypen Java Datentyp Definition Java Basics - Anfänger-Themen 6
MiMa Datentyp Short Wert zuweisen über Methode Java Basics - Anfänger-Themen 2
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
E Datentypen Benutzerdefinierten Datentyp verwenden Java Basics - Anfänger-Themen 1
ms_cikar Java Datentyp unwandlung Java Basics - Anfänger-Themen 7
G Datentypen Tipps, Ratschläge erwünscht bzgl. Datentyp bestimmen über Wertebereich Java Basics - Anfänger-Themen 5
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
M Interface als Datentyp Java Basics - Anfänger-Themen 12
R Variablen Datentyp erst während Laufzeit festlegen Java Basics - Anfänger-Themen 6
R Datentypen Datentyp eines Werts in einer Textdateizeile abfragen und ändern Java Basics - Anfänger-Themen 4
R Interface Datentyp bei Erzeugung eines Objekts, dessen Klasse eine Schnittstelle implementiert Java Basics - Anfänger-Themen 18
B Collections Collection soll nur einen bestimmten Datentyp aufnehmen Java Basics - Anfänger-Themen 12
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
B datentyp in binär umwandeln Java Basics - Anfänger-Themen 5
S Primitiver Datentyp Short , Vorteil/Nachteil Betrachtung Java Basics - Anfänger-Themen 6
J Field auf Datentyp prüfen Java Basics - Anfänger-Themen 8
D Datentyp Object Java Basics - Anfänger-Themen 2
A Datentypen Mehrdimensionaler Datentyp gesucht Java Basics - Anfänger-Themen 4
D Datentypen Abstrakter Datentyp lässt sich nicht casten Java Basics - Anfänger-Themen 7
F Klassenorganisation: Datentyp in Datentyp anlegen Java Basics - Anfänger-Themen 3
N Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück... Java Basics - Anfänger-Themen 4
J Datentypen Was ist der Sinn vom Datentyp "char" ? Java Basics - Anfänger-Themen 11
G Eigener Autoboxing Datentyp Java Basics - Anfänger-Themen 3
Binary.Coder Welcher Datentyp für den Simplex Algorithmus Java Basics - Anfänger-Themen 3
Guybrush Threepwood Effizientester Datentyp zur Speicherung einer ungeordneten Menge von ints Java Basics - Anfänger-Themen 8
B Datentyp für +,-,*,/ Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben