binäres ODER oder mehr Konstanten?

deamon

Bekanntes Mitglied
Hallo,

ich habe eine Klasse mit fünf int-Konstanten, die kombiniert werden können, woraus sich insgesamt 32 Kombinationen ergeben. Die Frage ist nun, ob man die API schlank halten und den Nutzer der API zu einer Verkettung mit binärem ODER zwingen sollte oder ob man diese Kombinationen auch als Konstanten in die Klasse aufnimmt, zumal 32 ja überschaubar sind.

In Code ausgedrückt sieht das dann so aus:
Java:
setPermission(rwx); // mehr Konstanten

setPermission(r|w|x); // Verkettung mit binärem ODER

Erstere Variante ist bequemer zu schreiben und vermutlich leichter verständlich, denn binäre Operationen sind für viele ja doch etwas ungewohnt. Aber dafür ist die API-Doku halt mit 32 Konstanten weniger übersichtlich.

Was findet ihr besser?
 

mvitz

Top Contributor
Von welchem Typ sind denn rwx ?

Wenn das eigene Klassen sind, könnte man mit nem Builder-Pattern evtl. eine kleine einfach DSL designen. So ungefähr:

Java:
setPermission(canRead().and(canWrite()).and(canExecute()).build());
 

deamon

Bekanntes Mitglied
Das sind int-Konstanten. Prinzipiell finde ich die Idee mit dem Builder nicht schlecht, aber damit das performant ist, müsste ich meine Klasse in eine "dumme" Datenstruktur und eine Klasse zur Prüfung der Berechtigung aufteilen. Andernfalls müsste man nämlich sehr oft den Builder aufrufen (es geht um Millionen von Objekten) und da zählt jede tausendstel Sekunde.
 

Landei

Top Contributor
Wenn es nicht auf das letzte Quentchen Performance ankommt, würde ich enums verwenden. Über ein EnumSet lässt sich das Gleiche wie mit einer Oder-Verknüfung erreichen.
 
Zuletzt bearbeitet:

deamon

Bekanntes Mitglied
Ich habe mal in einem anderen Fall nachgemessen und der Unterschied zwischen einem Integer-Zugriff und dem Zugriff auf den Wert eines Enums verschwindet im Rauschen der Messungenauigkeit. Laut Test ist sogar die Enum-Variante schneller, was aber eigentlich kaum sein kann.

Getestet habe ich übrigens mit j-benchmark2
 

Landei

Top Contributor
Ein EnumSet für ein Enum mit weniger als 65 Einträgen wird intern über Bitmaskenoperationen auf einem long abgebildet. Der Hotspot-Compiler optimiert noch ein paar Objekterzeugungen weg, und schon bist du performancemäßig wieder bei der Originalvariante.
 
Zuletzt bearbeitet:
D

Dow Jones

Gast
Moin,
ich würde auf jeden Fall die veroderten Konstanten nehmen. Das ist einfach Standard, und besonders schwer zu verstehen ist es ja auch nicht. Dazu kommt, das es dadurch einfacher wird sich den Parameter für den Funktionsaufruf zur Laufzeit "zusammenzubasteln" bzw. ihn selber auszuwerten. Wenn man wissen möchte ob man Schreibberechtigung hat müsste man ansonsten den Rückgabewert von getPermissions() mit sämtlichen Konstanten vergleichen die das 'w' beinhalten (w, rw, wx, rwx etc). Ich persönlich würde über eine solche API ganz schön fluchen... :eek:
 

ice-breaker

Top Contributor
Enum und EnumSet: da kann nämlich gleich schon der Compiler herumnörgeln, wenn jemand versucht falsche Enums zu übergeben, mit veroderten ints muss man das manuell machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Input/Output Binäres,zeilenorientiertes auslesen Allgemeine Java-Themen 10
I "Neues" Lizenzmodell Oracle - JRE nicht mehr zur Redistribution freigegeben? Allgemeine Java-Themen 16
Blender3D Alte Beiträge nicht mehr vorhanden Allgemeine Java-Themen 6
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
G @PostConstruct Annotation nicht mehr gültig ? Allgemeine Java-Themen 7
T Projekt baut nicht mehr/lässt sich nicht mehr ausführen Allgemeine Java-Themen 6
A Best Practice Wie viele Referenzen machen Sinn? Weniger ist mehr? Allgemeine Java-Themen 1
X JNA funktioniert nicht mehr Allgemeine Java-Themen 4
G Eclipse Java findet MySQL Driver nach export nicht mehr Allgemeine Java-Themen 2
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
T Plötzlich wird package nicht mehr gefunden Allgemeine Java-Themen 3
D kein Versand von Mails mit Anhang mehr Allgemeine Java-Themen 2
N jre1.8.0_161 mehr CPU Allgemeine Java-Themen 0
E GUI.jfm lässt sich nicht mehr öffnen Allgemeine Java-Themen 1
Joker4632 Klassen Buffered Reader liest die Leerzeichen am Zeilen Ende nicht mehr Allgemeine Java-Themen 2
M JDK installieren MD5 SHA-1 Signatur in JAR nicht mehr vertrauenswürdig Allgemeine Java-Themen 3
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
I nach Image Load in ListView, kann Ordner nicht mehr gelöscht werden Allgemeine Java-Themen 1
Thallius Bekomme keine Exception mit Stacktrace mehr. Was habe ich getan? Allgemeine Java-Themen 13
Tacofan Button nicht mehr anklickbar machen Allgemeine Java-Themen 8
H Alter Java-Programm läuft nicht mehr. Laut strace fehlt libpthread.so.0 Allgemeine Java-Themen 3
B Bild aus Jar kann nach Export nicht mehr gefunden werden Allgemeine Java-Themen 13
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
S Wenn mehr als die Hälfte Großgeschrieben ist. Allgemeine Java-Themen 2
D mouseWheelMoved => erst reagieren, wenn für 1s das Mausrad nicht mehr benutzt wurde Allgemeine Java-Themen 4
T Nach Java Update: Jar Datein öffnen sich nicht mehr mit doppelklick Allgemeine Java-Themen 3
X Logging Messages - mehr Details? Allgemeine Java-Themen 4
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
M Eclipse Keine Ausgabe mehr bei Fehlern Allgemeine Java-Themen 3
F E-Mail aus JAVA senden nach Umstellung auf Netbean 7.4 mit Java 7U45 nicht mehr möglich Allgemeine Java-Themen 4
O Klassen Programm in Klassen unterteilt, werte werden nicht mehr übernommen Allgemeine Java-Themen 3
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
F Nach Export wird PDF Datei nicht mehr gefunden Allgemeine Java-Themen 0
L iText PDF Form-Felder werden nach Bearbeitung mit iText nicht mehr richtig erkannt. Allgemeine Java-Themen 2
W Regulärer Ausdruck für 0 oder mehr Blanks Allgemeine Java-Themen 8
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
B JFreeChart -> TimeSeries-Plot -> mehr y-Achsen Allgemeine Java-Themen 2
GUI-Programmer Mehr als Properties Allgemeine Java-Themen 6
E Anwendung nutzt plötzlich nicht mehr 100% CPU Allgemeine Java-Themen 2
J Java programm lässt sich in win7 nach linux install nicht mehr ausführen Allgemeine Java-Themen 18
C Zugriff auf private Methode per reflection geht nicht mehr Allgemeine Java-Themen 3
M Java funktioniert nicht mehr Allgemeine Java-Themen 21
J Eclipse Elipse gibt mir keine Vorschläge mehr :( Allgemeine Java-Themen 6
N Java geht nicht mehr zu löschen Allgemeine Java-Themen 5
B Berechnung eines sinh abbrechen, wenn 16. Nachkommastelle sich nicht mehr ändert Allgemeine Java-Themen 7
J Java Pfad nicht mehr in Path Variablen??? Allgemeine Java-Themen 2
P Java Anwendung mehr Speicher zur Verfügung stellen?? Allgemeine Java-Themen 3
W 2D-Grafik nach getthumbnail läst sich Quellbild nicht mehr löschen Allgemeine Java-Themen 3
R DocumentListener: Programm Reagiert nicht mehr Allgemeine Java-Themen 2
V "Java(TM) Platform SE binary funktioniert nicht mehr" Allgemeine Java-Themen 5
C Hilfe! Mein Java mag nich mehr ganz... Allgemeine Java-Themen 11
5 Javaw funktioniert nicht mehr Allgemeine Java-Themen 5
Guybrush Threepwood iText de facto nicht mehr verwendbar Allgemeine Java-Themen 15
woezelmann Object nach Deserialisierung nicht mehr gleich Allgemeine Java-Themen 13
Y Auszuführendem Projekt mehr Speicherplatz zuweisen Allgemeine Java-Themen 3
S Jar Datei mit mehr Speicher starten Allgemeine Java-Themen 2
S JAR Datei, mehr Speicher bereitstellen Allgemeine Java-Themen 5
T "Java lernen" in etwas mehr als 8 Tagen Allgemeine Java-Themen 13
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
P not enough space for object heap - Trotz mehr RAM? Allgemeine Java-Themen 6
S HWPF Problem: doc lässt sich nach Bearbeitung nicht mehr lesen Allgemeine Java-Themen 6
M umgebung funktioniert nicht mehr Allgemeine Java-Themen 14
V Nur Ästetik oder mehr? Allgemeine Java-Themen 17
G Java Tool startet von heute auf morgen nicht mehr? Allgemeine Java-Themen 7
P OutOfMemoryError beim XML erstellen bzw parsen, mehr RAM? Allgemeine Java-Themen 4
G Mehr als drei Nullen nach dem Punkt? Allgemeine Java-Themen 8
J Java reagiert nicht mehr auf die Tastatur Allgemeine Java-Themen 2
G Deserialisierung funktioniert n. Refaktorisierung nicht mehr Allgemeine Java-Themen 10
G WindowClosingAdappter und mehr Allgemeine Java-Themen 4
M Klasse Desktop geht nicht mehr (EXCEPTION_ACCESS_VIOLATION) Allgemeine Java-Themen 9
C kann nicht mehr markieren ->TreeCellRenderer Allgemeine Java-Themen 6
S Rechner formatiert - nichts geht mehr. Allgemeine Java-Themen 2
M JLabels löschen (sollen nicht mehr gezeichnet werden) Allgemeine Java-Themen 10
T Eclipse will nicht mehr :( Allgemeine Java-Themen 2
M Java funktioniert nicht mehr Allgemeine Java-Themen 9
J Eingabeaufforderung funkrioniert nicht mehr! Allgemeine Java-Themen 5
I Weiß nicht mehr weiter! Bitte helft mir! Allgemeine Java-Themen 5
S Java und mehr als ein Prozessor Allgemeine Java-Themen 6
G "mehr" undo Allgemeine Java-Themen 8
M Java funktioniert jetzt nicht mehr Allgemeine Java-Themen 6
B Der Heap Space, ich weiß nicht mehr weiter! Allgemeine Java-Themen 15
G DBzugriff funktioniert nach 'Build Main Project' nicht mehr Allgemeine Java-Themen 2
O Prefixes in Java alt und nicht mehr notwendig oder nützlich Allgemeine Java-Themen 18
F Shell-Programme per Runtime.exec() starten und mehr? Allgemeine Java-Themen 4
N Servlets: Formulardaten auslesen (POST) - mehr Informationen Allgemeine Java-Themen 4
Neumi5694 Compiler-Fehler Konstanten entfernen während des Kompiliervorgangs Allgemeine Java-Themen 7
R Konstanten initialisieren - FRAGE Allgemeine Java-Themen 3
H Best Practice zu vielen konstanten Objekten? Allgemeine Java-Themen 10
E Variablen Konstanten definieren Allgemeine Java-Themen 4
F Konstanten mir Strings "verknuepfen" Allgemeine Java-Themen 10
Z Konstanten in Java Allgemeine Java-Themen 9
S jdk versus openjdk - Optimierung von Konstanten? Allgemeine Java-Themen 8
J abstrakte Klassen, Konstanten und Konstruktor Allgemeine Java-Themen 9
I Konstanten bei Erzeugung eines Objekts initialisieren Allgemeine Java-Themen 3
Schandro Annotation vs Javadoc bei Konstanten Allgemeine Java-Themen 2
L Konstanten der Klasse Color - Naming Conventions Allgemeine Java-Themen 6
GilbertGrape persistentes Enum oder Konstanten? Allgemeine Java-Themen 3
F Warum lokale Konstanten klein schreiben? Allgemeine Java-Themen 4
G Effizienz von enum vs. Konstanten Allgemeine Java-Themen 4
R Namen von Konstanten mit Strings vergleichen Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben