Typedefs in Java?

Sascha Laurent

Aktives Mitglied
Ich beziehe mich hier nochmal indirekt auf

http://www.java-forum.org/java-basics-anfaenger-themen/97828-welche-collection.html#post622037

In C++ kann man z.B. auch dazu benutzen, um integers einem Eigenständigen Namen zu geben. Ich habe nochmal gegoogelt habe aber nichts passendes gefunden.

z.B.
typdef myint int;

private class myint extends Integer

ist z.B. nicht möglich, da Integer als final deklariert ist.

Danke
Sascha

Bevor jetzt aber wieder ein Frage kommt, wie "wozu brauchst du das denn?" :oops::autsch::pueh:
Es ist manchmal ganz sinnvoll eigene Datentypen zum besseren Lesen zu Verwenden.
Außerdem ist es manchmal auch ganz sinnvoll einen selbstbeschriebenen Datentyp zu verwenden, wenn dieser zu einem späteren Zeitpunkt einfach ausgetauscht werden soll.
 
Zuletzt bearbeitet:

André Uhres

Top Contributor
Es ist manchmal ganz sinnvoll eigene Datentypen zum besseren Lesen zu Verwenden.
Außerdem ist es manchmal auch ganz sinnvoll einen selbstbeschriebenen Datentyp zu verwenden, wenn dieser zu einem späteren Zeitpunkt einfach ausgetauscht werden soll.
Wozu brauchst du das denn? :D
"myint" liest sich jedenfalls nicht besser als "int" und ohne gemeinsame Schnittstelle kann man eh keine Datentypen später "einfach austauschen".
 

Marco13

Top Contributor
Bei der Antwort aus dem verlinkten Thread
Java:
public class NameMap extends HashMap<List<String>> { }
Hat's mich kurz geschaudert. Eigentlich sollte man IMHO nicht eine Klasse in dieser Form anlegen. Einerseits ist der Wunsch danach schon nachvollziehbar. Spätestens wenn man eine
Code:
private Map<List<? extends Comparable>, Set<List<? super List<? extends Number>>> freakyMap;
hat, könnte man versucht sein, das mit so einem "Pseudo-Typedef" zu einer einfachen Klasse "FreakyMap" zusammenzufassen. Aber für mich ist das unschön, weil es keine private Vererbung (wie in C++) gibt. Außer durch (ggf. aufwändige) Delegation kann man das kaum umgehen. Zumindest theoretisch etwas sauberer wäre dann sowas wie
Code:
interface FreakyMap extends Map<List<? extends Comparable>, Set<List<? super List<? extends Number>>> { }

class HashFreakyMap extends HashMap<...> implements FreakyMap<...> { }
aber ... naja - alles hat seine Grenzen. Es könnte aber Fälle geben, wo das gerechtfertigt ist - zumindest bei statischen inneren/package private Klassen ist ja alles erlaubt ;)
 

thE_29

Top Contributor
Also da ich in letzter Zeit mehr C++ als Java mache, finde ich die schon recht toll ;)
Manchmal bißchen verwirrend, da man dann nach 5 Verweisen draufkommt das isn ganz normaler String oder int aber der Typ heißt zB SATCHANNEL.
In der WinApi hat das MS eigentlich fast überall gemacht.. Aber unter Java kenne ich sowas nicht..
Ableiten ist ja nicht das gleiche und geht ja bei final Klassen sowieso nicht..
 
M

maki

Gast
Bevor jetzt aber wieder ein Frage kommt, wie "wozu brauchst du das denn?"
Wozu brauchst du das denn??
Meine ich ernst, ist doch vollkommen überflüssig in Java.

Es ist manchmal ganz sinnvoll eigene Datentypen zum besseren Lesen zu Verwenden.
Wenn du einen eigenen Datentypen hast, kannst du den ja benennen wie du möchtest.
Wenn du aber keinen eigenen Datentypen hast, wäre es doch nur verwirrend einem bestehenden Datentypen einen anderen Namen zu verpassen.
 

Marco13

Top Contributor
Ist dieser Wunsch nicht legitim? ???:L

Einerseits ist der Wunsch danach schon nachvollziehbar. Spätestens wenn man eine
Code:
private Map<List<? extends Comparable>, Set<List<? super List<? extends Number>>> freakyMap;
hat, könnte man versucht sein, das mit so einem "Pseudo-Typedef" zu einer einfachen Klasse "FreakyMap" zusammenzufassen. Aber für mich ist das unschön, weil es keine private Vererbung (wie in C++) gibt.

(unabhängig davon, wie man es umsetzen sollte oder wie nicht - natürlich sollte das nur ein Extrembeispiel sein, dass man so in jedem fall NICHT umsetzen würde, aber grundsätzlich wird's eben spätestens bei verschachtelten Generics schnell unübersichtlich...)
 

kama

Top Contributor
Hallo,

typdef myint int;
Wenn schon dann richtig..

Code:
typedef int myint;

Aber in dem Zusammenhang macht das nicht wirklich sinn...

Code:
typedef char  Int8;
typedef short Int16;
typedef int   Int32;
Bei so etwas schon eher...Das ist dann das Thema wg. Plattformunabhängigkeit...

und noch mehr bei so etwas:
Code:
typedef int(*FunktionsZeiger)(double);
Aber das gibt es ja zum Glück in Java nicht ;-)

MfG
Karl Heinz Marbaise
 
N

nettersurfer

Gast
Ich brauche auch so was. Voll im ernst.
Zum Beispiel um bei einem Funktionsaufruf mehrere Parameter vom Typ String zu übergeben, die aber verschiedene Wertebereiche haben. kaufeSchuh(grösse, farbe) /* beide Parameter Strings */ dann könnte der Compiler feststellen, wenn die Argumente in der falschen Reihenfolge vorliegen.
 

tfa

Top Contributor
Ich brauche auch so was. Voll im ernst.
Zum Beispiel um bei einem Funktionsaufruf mehrere Parameter vom Typ String zu übergeben, die aber verschiedene Wertebereiche haben. kaufeSchuh(grösse, farbe) /* beide Parameter Strings */ dann könnte der Compiler feststellen, wenn die Argumente in der falschen Reihenfolge vorliegen.

Dieses Problem könntest du eher mit Enums lösen.
 
F

Firephoenix

Gast
Oder wenn man es mit Strings macht wenigstens eine ordentliche Parametervalidierung mit entsprechender IllegalArgumentException - wenn man eine Methode falsch benutzt darf einem als Programmierer ruhig mal eine unchecked Exception bis nach ganz oben durchknallen, dafür sind die Dinger schließlich da.

(Für den Fall sind Enums aber tatsächlich schöner ;) )

Gruß
 

d3rbastl3r

Bekanntes Mitglied
Ich brauche auch so was. Voll im ernst.
Zum Beispiel um bei einem Funktionsaufruf mehrere Parameter vom Typ String zu übergeben, die aber verschiedene Wertebereiche haben. kaufeSchuh(grösse, farbe) /* beide Parameter Strings */ dann könnte der Compiler feststellen, wenn die Argumente in der falschen Reihenfolge vorliegen.

Entweder wie tfa bereits sagte mit Enums, oder mit eigenen klassen

Java:
class Schuhgroesse{
    private String groesse;

    public Schuhgroesse(String groesse){
        this.groesse = groesse;
    }

    public String toString(){
        return this.groesse;
    }
}

class Schuhfarbe{
    private String farbe;

    public Schuhgroesse(String farbe){
        this.farbe= farbe;
    }

    public String toString(){
        return this.farbe;
    }
}

kaufeSchuh(
    new Schuhgroesse("grösse"),
    new Schuhfarbe("farbe")
);
 

Jango

Gesperrter Benutzer
z.B.
typdef myint int;

private class myint extends Integer

ist z.B. nicht möglich, da Integer als final deklariert ist.

Das Ganze macht meiner Meinung nach eh keinen Sinn, weil nach der Typdefinition 'myint' den Datentyp 'int' repräsentiert. Und ich hab noch nie gehört, dass man eine Klasse nach einem Datentyp benennen kann - das sind doch geschützte Wörter in einer Programmiersprache - oder irre ich mich hier?
 

Antoras

Top Contributor
Das Thema ist zwar schon etwas älter, aber da ich finde, dass an der Fragestellung bisher ein wenig vorbei geredet wurde, muss ich dazu noch was posten.

Java hat keine Typsynonyme, das heißt deswegen aber nicht, dass sie nicht sinnvoll einsetzbar sind. Sie erlauben umfassende Möglichkeiten typsicher zu programmieren. Die einfachste Form wäre
Code:
type File = String
. Das birngt noch nicht viel außer ein wenig Dokumentation des benutzen Typs. Parametrisierte Typen mit einem Typalias zu versehen ist schon sinnvoller, da sie einfacher zu benutzen sind
Code:
type ValidationList<A, B> = Validation<List<A>, B>
. Typaliase existieren nur zur Compilezeit, d.h. sie kosten keinen Runtime-Overhead (im Gegensatz zu einer Subklasse, die man in Java dafür verwenden müsste). In Haskell gibt es noch das
Code:
newtype
Schlüsselwort, das verhindert, dass man Funktionsparameter falsch verwendet:

Code:
newtype ShoeSize = ShoeSize String
newtype ShoeColor = ShoeColor String
data Shoe = Shoe {size :: ShoeSize, color :: ShoeColor}

buyShoe :: ShoeSize -> ShoeColor -> Shoe
buyShoe = Shoe

buyShoe (ShoeSize "35") (ShoeColor "green")
Das kostet wieder kein Runtime Overhead, da die
Code:
newtype
zur Compilezeit wegoptimiert wird. Kann man in Java prinzipiell mit Enums auch erreichen, aber halt eben nur mit Runtime Overhead.

Und ich hab noch nie gehört, dass man eine Klasse nach einem Datentyp benennen kann - das sind doch geschützte Wörter in einer Programmiersprache - oder irre ich mich hier?
In Java ist ein
Code:
class Integer {}
gültig, aber kein
Code:
class int {}
. Das ist unschön, aber tatsächlich nur auf Sprachen begrenzt, die zwischen Objekten und primitiven Datentypen im Typsystem unterscheiden. In Haskell oder Scala wäre ein
Code:
type Int = String
(was wie gesagt keiner Vererbung entspricht) ohne Probleme möglich, warum sollte es auch nicht gehen? Kann der Compiler wieder alles wegoptimieren sodass kein Runtime Overhead entsteht (wobei das Beispiel natürlich dämlich ist).

wenn man eine Methode falsch benutzt darf einem als Programmierer ruhig mal eine unchecked Exception bis nach ganz oben durchknallen, dafür sind die Dinger schließlich da.
Warum sollte der Fehler erst zur Laufzeit erscheinen, wenn er auch vom Compiler gefunden werden kann? In Haskell wäre es unmöglich die oben gezeigte [c]buyShoe[/c] Funktion falsch aufzurufen. In Java hätte man ähnliche Typsicherheit mit enums auch, nur benutzt das so niemand. Ein
Code:
Shoe buyShoe(ShoeSize size, ShoeColor color)
findet man selten, eher
Code:
Shoe buyShoe(String size, String color)
. Wenn man da die Parameter vertauscht hat der Compiler keine Chance den Fehler zu finden. In Haskell würde niemand
Code:
buyShoe :: String -> String -> Shoe
schreiben (außer Anfänger).

Typsicherheit ist unglaublich wichtig - warum sonst sollten statisch typisierte Programmiersprachen existieren. Javas löchrige Typsystem ist aber kein Argument dafür Typsicherheit wieder unnötig aufzugeben.
 

Noctarius

Top Contributor
Und ich hab noch nie gehört, dass man eine Klasse nach einem Datentyp benennen kann - das sind doch geschützte Wörter in einer Programmiersprache - oder irre ich mich hier?

Innerhalb der Sprache Java ist das tatsächlich absolut richtig. Im Bytecode könnte man solche Dinge allerdings umsetzen. Die JVM Spec ist in Sachen Bezeichner um einiges liberaler als die Programmiersprache :)
 

Noctarius

Top Contributor
@gassst
Aber wieso sollte man einen int als dword, handle, ... bezeichnen wenn man bei int weiß "ja es ist 32bit und fertig".

und @hüteüberhüte:
Bitte etwas mehr Umgangston. Es besteht ein kleiner Unterschied zwischen "troll dich" und "verpiss dich" - Danke
 
H

hüteüberhüte

Gast
[OT]Entschuldigung - Aber - ich wurde auch angetrollt. Der Umgangston war aber dennoch nicht i.O. Löscht meinen Beitrag am besten wieder, ich kann ihn jetzt nicht mehr editieren. And if i must be cautioned, auch Ok[/OT]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Probleme mit drucken aus Java Java Basics - Anfänger-Themen 3
Gokul Java chart library suggestion for web application? Java Basics - Anfänger-Themen 2
D wie kann ich gcc aus einer .java datei heraus aufrufen? Java Basics - Anfänger-Themen 2
S Text Formatierung in Java Java Basics - Anfänger-Themen 2
B Erste Schritte yaml parsen in Java Java Basics - Anfänger-Themen 19
C Methoden Umlaute in Java Java Basics - Anfänger-Themen 18
W Java-PRogramm liest als EXE-File Nicht USB, jedoch aus NetBeans Java Basics - Anfänger-Themen 45
W Methoden java map ersatz für c++map Java Basics - Anfänger-Themen 3
M Erste Schritte Java Primzahltester Java Basics - Anfänger-Themen 4
A csv Reader für Java? Java Basics - Anfänger-Themen 27
K Java - Enums Java Basics - Anfänger-Themen 30
tomzen Java Unterstützung für exel dateien installieren. Java Basics - Anfänger-Themen 2
Rookar java.lang.NoClassDefFoundError: org/json/JSONException Java Basics - Anfänger-Themen 2
Rookar Mit Button andere java öffnen Java Basics - Anfänger-Themen 4
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
I Backend in Java und Ansicht von Dateien in statische HTML Seiten? Java Basics - Anfänger-Themen 15
R Input/Output Verwendung des Euro-Zeichens in Java Java Basics - Anfänger-Themen 7
I Push Nachrichten von JAVA EE App an Mobile App Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
G Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
G Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32

Ähnliche Java Themen

Neue Themen


Oben