File.pathSeparator und File.separator

Neumi5694

Top Contributor
Gerade Java selbst in seiner Ur-Form beinhaltet eine Menge No-Gos, von denen man Programmierer heute abzuhalten versucht. Der oftmals eigentlich unnötig direkte Zugriff auf Variablen wurde aber bis heute beibehalten, ich schätze mal, um Abwärtskompatibilität beizubehalten.
Auch liefern viele Methoden oft Arrays, wo Listen sinnvoller wären. Das mag daran liegen, dass Listen damals per get() nur Object liefern konnten oder auch damit, dass die Funktionen über Interfaces auf Systemmethoden zugreifen, wo Arrays notwendig werden. Hier kann man sich zum Glück mit Arrays.asList() helfen.
 

DrPils

Bekanntes Mitglied
Es ist an für sich unsinnig, konstante Konstanten in Methode zu verlagern.
Wieso?
Bei "Laufzeitkonstanten" passiert ja das umgekehrte. Eine Methode wird in eine Variable verlagert. Also um den File Separator über die Variable zu bekommen, wird intern die Methode FileSystem.getSeperator() aufgerufen. Ich empfinde eher diesen weg als Unnsinnig.
Array.length ist imo auch keine Laufzeitkonstante, sondern eine Eigenschaft. Laufzeit Konstante bedeutet für mich, dass der Wert zur ganzen Laufzeit bekannt ist und nicht veränderbar.
 

DrPils

Bekanntes Mitglied

Ist eine Objektvariable, also an ein Objekt geknüpft. Existiert dieses Objekt nicht oder nicht mehr, existiert auch seine length Eigenschaft nicht oder nicht mehr.
Außerdem haben verschiedene Arrays verschiedene längen.
 
Aber diese Diskussion führt zu nichts. Es ist nur wichtig, zu beachten, dass man mit array.length wie mit einer Konstante umgehen kann (und keine Methodenaufrufklammern braucht). Wie es intern realisiert wurde, ist dabei unerheblich.
 
Und, ihr wollt mich doch veräppeln:

Java:
public class MyClass {
    public static void main(String args[]) {
        int[] myArray = new int[(int)(Math.random() * 100)];
        switch (myArray.length) {
            case 0:
                System.out.println("emp");
                break;
            default:
                System.out.println("not emp");
                break;
        }
    }
}
 
Java:
public class MyClass {
    public static class InnerFC {
        public final int x = 42;
    }
    public static void main(String args[]) {
        int[] myArray = new int[(int)(Math.random() * 2)];
        InnerFC ifc = new InnerFC();
        final int wichtig = 5;
        switch (myArray.length) {
            case myArray.length:
                System.out.println("geht nicht");
                break;
            case ifc.x:
                System.out.println("geht nicht");
                break;
            case wichtig:
                System.out.println("geht");
                break;
            default:
                System.out.println("not emp");
                break;
        }
    }
}

Ausgabe:
Code:
/MyClass.java:10: error: constant expression required
            case myArray.length:
                        ^
/MyClass.java:13: error: constant expression required
            case ifc.x:
                    ^
2 errors
 

KonradN

Super-Moderator
Mitarbeiter
Das Problem ist aber doch hier, dass wir in den Begriffen ungenau sind. Was bezeichnet man als eine Konstante?

Im Deutschen ist es umgangssprachlich so, dass wir vieles einfach als Konstante bezeichnen. Die JLS unterscheidet aber zwischen final fields und static constant variables: https://docs.oracle.com/javase/specs/jls/se19/html/jls-13.html#jls-13.4.9

@underConstruction: Und ich habe in #24 verlinkt, was eine constant expression ist. Einfach einmal lesen, dann verstehst Du es auch.

Wieso braucht Tobias mit einem neuen Account eigentlich nur drei Nachrichten zu schreiben, und schon ist klar, wer er ist?
Drei? Die Antwort in dem Thread Casting war sein erster oder zweiter Post und da war es schon klar ... weshalb ich da auch gezögert habe zu antworten. Aber den report Knopf (die Admins haben meines Wissens Interesse nur an der Erkennung) hatte ich da schon gedrückt, ehe er in anderen Threads deutlich aufschlug :)

Edit: Natürlich ist mir klar, dass ihr mir jetzt vorhalten werdet, dass ich ja schon weiss, was andere später posten ... Daher ist es natürlich unfair, wenn ich so früh den Buzzer drücke weil ich Tobias erkannt habe ... ich kenne ja bereits Posts, die er noch schreiben wird :)
 

DrPils

Bekanntes Mitglied
InnerFx.x ist ja keine Konstante, x ist an eine InnerFC Instanz geknüpft

Java:
public class MyClass {
    public static class InnerFC {
        public static final int x = 42;
    }
    public static void main(String args[]) {
        int[] myArray = new int[(int)(Math.random() * 2)];
        final int wichtig = 5;
        switch (myArray.length) {
            case myArray.length:
                System.out.println("geht nicht");
                break;
            case InnerFC.x:
                System.out.println("geht eben doch");
                break;
            case wichtig:
                System.out.println("geht");
                break;
            default:
                System.out.println("not emp");
                break;
        }
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
InnerFx.x ist ja keine Konstante, x ist an eine InnerFC Instanz geknüpft
Es ist halt ein "const field". Aber es ist keine "static constant variable". Wäre es eine static constant variable, dann könnte man es als "constant expression" angeben. Die Links finden sich ja alle bereits in meinen bisherigen Antworten. Und bei 15.29 findet sich dann in der Auflistung:
  • Qualified names (§6.5.6.2) of the form TypeName . Identifier that refer to constant variables (§4.12.4).

Das einfach nur als erneuter Hinweis auf Basis der JLS. Aber Dir war es ja soweit klar - zumindest hast du den Code ja entsprechend anpassen können...
 

KonradN

Super-Moderator
Mitarbeiter
:D
Ich empfehle, mit einem neuen Account nicht gleich direkt auf Fragen zu antworten, sondern erstmal selbst Fragen zu stellen.
Denn das ist ja das Muster der meisten "normalen" User. Kaum jemand schlägt hier auf, um dann sofort mit Antworten (bzw. Diskussionsbeiträgen in existierenden Threads) um sich zu werfen. :)
Also nur so als Tipp.
Guter Tipp, aber die Erfahrung zeigt, dass der Detektor dennoch anspringt. Das hatten wir ja schon in der Vergangenheit mit z.B. Fragen zu Tic Tac Toe negamax Algorithmus und so ... Da war das sein Thread und beim Antworten war mir bereits klar, wer die Frage gestellt hat (nur eben interessiert mich das in der Regel nicht :) ).
 

KonradN

Super-Moderator
Mitarbeiter
Hmmm... dann sollten wir zusammen mit ihm nochmal näher überlegen, welche Strategie für ihn denn Sinn macht, um nicht erkannt zu werden.
Zu einer Meinung Argumente bringen. Wenn Dinge falsch sind, dann nicht nur schreiben, dass es "Bullshit" ist sondern auch hier Argumente bringen. Dann Namen weglassen oder ob jemand immer Recht hat oder so.

Ich denke, damit würde er jede Erkennung gnadenlos austricksen!

Und dann diese Genugtuung: Nach einem Jahr Aktivität - unerkannt im Forum - mit über 100 Posts in der Plauderecke ein Post: "Ätsch, ich bin Tobias und ihr habt mich nicht erkannt!"

Ja, das müsste gehen... Ich denke meine MI könnte er damit überlisten (MI: Menschliche Intelligenz).
 
Es ist halt ein "const field". Aber es ist keine "static constant variable"
Hm, den Unterschied (also, die unterschiedliche Verwendungsweise) kannte ich nicht. Wieder was gelernt, Danke. Dennoch verhält sich myArray.length ja nicht anders als ein const field. Und darauf wollte ich hinaus, dass dann die interne Realisierung "unwichtig" ist ...

Sooo ...

Über Bytecode sprachen wir noch gar nicht. 🤣 Aber hat der TE daran noch Interesse?
 
Mir wird das hier langsam zu bunt ...

Dann darf eine Constant-Expression eben kein zusammengesetzter Ausdruck sein ... auch, wenn die JLS da eben keine weitere Unterscheidung vornimmt ...

Btw., ich habe noch nie eine Array-Länge als Case-Konstante in einem Switch-Case gebraucht. Ggf. gibt es dafür nicht mal einen (sinnvollen) Use-Case ...
 

KonradN

Super-Moderator
Mitarbeiter
So etwas wie ein "const field" gibt es nicht in Java.
Ja, der Schnitzer geht auf mich zurück. Ich meinte natürlich "final field" und meine Aussage in #32 ("const field" vs "static constant variable") sollte natürlich 1:1 das sein, was ich schon in #30 geschrieben habe mit Link auf die JLS:
Die JLS unterscheidet aber zwischen final fields und static constant variables: https://docs.oracle.com/javase/specs/jls/se19/html/jls-13.html#jls-13.4.9

Da war ich in Gedanken schneller als die Finger tippen wollten so dass das constant vom zweiten als const auch noch nach vorne gewandert ist :)
 

KonradN

Super-Moderator
Mitarbeiter
argumentative Unzugänglichkeit
Wenn Du Argumente bringen würdest, dann wäre es ja ok und man könnte sich inhaltlich mit Dir auseinander setzen. Aber das tust Du ja leider nicht!

Statt Argumente kommen nur direkte Angriffe gegen Leute mit anderer Meinung. Das ist genau das, was @Hansen_07 meinte.

Und ich denke, das Thema ist dann hier auch damit abgehakt, denn es ist alles gesagt worden.
 

Neumi5694

Top Contributor
Wieso?
Bei "Laufzeitkonstanten" passiert ja das umgekehrte. Eine Methode wird in eine Variable verlagert. Also um den File Separator über die Variable zu bekommen, wird intern die Methode FileSystem.getSeperator() aufgerufen. Ich empfinde eher diesen weg als Unnsinnig.
Array.length ist imo auch keine Laufzeitkonstante, sondern eine Eigenschaft. Laufzeit Konstante bedeutet für mich, dass der Wert zur ganzen Laufzeit bekannt ist und nicht veränderbar.
Ich würde diese "Konstanten" jetzt auch nicht zwingend als solche sehen. Wie du bereits korrekt gesagt hast, sind das im Grunde gar keine, sondern greifen auf Eigenschaften des Betriebssystems zu, bzw. ihr Inhalt ist betriebssystemabhängig. Hier ist das Design tatsächlich etwas fragwürdig, hier würde ich persönlich den Weg über eine Methode gehen. Aber Konstanten, bei denen im Quellcode dahinter ein fixer Wert steht, wären in einer Methode wohl nicht gut aufgehoben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
izoards Prunsrv - Windows Service - .bat file starten Java Basics - Anfänger-Themen 84
I File Uploader... Statusanzeige, Berechnung des Status etc. Java Basics - Anfänger-Themen 0
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
berserkerdq2 IOstreams, was unterscheidet file von z. B. BufferedWriter? Java Basics - Anfänger-Themen 11
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
A java jar-File Java Basics - Anfänger-Themen 1
E Executable jar file fehler Java Basics - Anfänger-Themen 9
I Upload File zu einem Webservice Java Basics - Anfänger-Themen 17
I ZIP File erstellen Java Basics - Anfänger-Themen 10
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
Tom/S File Java Basics - Anfänger-Themen 10
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
A Checkstyle - File contains tab characters Java Basics - Anfänger-Themen 2
H Java file nicht gefunden Java Basics - Anfänger-Themen 5
C File speichern Java Basics - Anfänger-Themen 5
C Runnable Jar-File erzeugen Java Basics - Anfänger-Themen 14
C Pfad zu Properties-File bei ResourceBundle Java Basics - Anfänger-Themen 7
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
rafi072001 Lesen aus einem Excel File Java Basics - Anfänger-Themen 10
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
K File (png) in Image laden Java Basics - Anfänger-Themen 3
B Inputstream in file schreiben? Java Basics - Anfänger-Themen 23
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
T Buffered Stream leert Txt File Java Basics - Anfänger-Themen 3
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
Dimax In Java File (nicht in Java Projekt) mysql Driver importieren Java Basics - Anfänger-Themen 3
K File wird in der .Jar nicht gefunden Java Basics - Anfänger-Themen 3
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
Trèfle EXCEL-File Laufwerkunabhängig einbinden. Java Basics - Anfänger-Themen 1
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
B Hilfe bei InputStream To File Java Basics - Anfänger-Themen 22
topi relativer Pfad in einem Runnable JAR file Java Basics - Anfänger-Themen 12
A jar File kleiner bekommen Java Basics - Anfänger-Themen 3
B File öffnen in src/main/webapp Java Basics - Anfänger-Themen 4
K File-Name Vergleich Java Basics - Anfänger-Themen 2
krgewb Runnable JAR File Export Java Basics - Anfänger-Themen 11
S Maxium aus einer File finden Java Basics - Anfänger-Themen 12
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
D Input/Output File exists canRead canWrite Java Basics - Anfänger-Themen 11
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
F File von Windowsfreigabe laden Java Basics - Anfänger-Themen 1
S java.nio.file.FileSystemException bei Dateizugriff vermeiden Java Basics - Anfänger-Themen 7
Vince42 NIO File Tree in XML umwandeln Java Basics - Anfänger-Themen 10
J Zweidimensionales Array in CSV File exportieren Java Basics - Anfänger-Themen 3
E War-File Problem mit Eclipse Java Basics - Anfänger-Themen 3
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
M Email versenden Outlook, attached File, ohne Anmeldung Java Basics - Anfänger-Themen 4
M Input/Output Word File Kopieren Java Basics - Anfänger-Themen 12
K Runable Jar File erstellen Java Basics - Anfänger-Themen 17
T Java Executable jar file funktioniert nicht Java Basics - Anfänger-Themen 4
sourcecorn Werte aus einem File lesen Java Basics - Anfänger-Themen 6
Kopak'rraf Korruptes zip File. Java Basics - Anfänger-Themen 0
T File für Einstellungen wird nicht geladen Java Basics - Anfänger-Themen 1
S Sounddatei in Jar File integrieren Java Basics - Anfänger-Themen 2
S Index File bauen Java Basics - Anfänger-Themen 5
T Anzeige, wie lange es noch dauert bis ein File gesendet ist. Java Basics - Anfänger-Themen 2
T filereader , file aus programm einlesen Java Basics - Anfänger-Themen 12
Ghostman1711 Itext PDF print File gelockt by Java Java Basics - Anfänger-Themen 15
N Email mit Anhang - File not Found Java Basics - Anfänger-Themen 1
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
Syncopated Pandemonium Compiler-Fehler The constructor MP3File(File) refers to the missing type NoMPEGFramesException Java Basics - Anfänger-Themen 7
S File mit canRead() testen Java Basics - Anfänger-Themen 4
A file.delete funktioniert nicht Java Basics - Anfänger-Themen 15
K Classpath Lesen von Property-File Java Basics - Anfänger-Themen 1
S jar file Java Basics - Anfänger-Themen 19
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
B Dateityp von File bekommen Java Basics - Anfänger-Themen 2
I Automatisch Verzeichnis erstellen bei File erstellen Java Basics - Anfänger-Themen 5
E Große Datenmengen effizient in CSV File speichern Java Basics - Anfänger-Themen 4
I String zu File umwandeln Java Basics - Anfänger-Themen 2
N File virtuell ByteStream Java Basics - Anfänger-Themen 11
X Übergabeparameter Konstruktor (File) Java Basics - Anfänger-Themen 13
Anfänger2011 file.isDirectory() liefert falschen Wert!? Java Basics - Anfänger-Themen 1
ms_cikar Jar file mit resource erzuegen Java Basics - Anfänger-Themen 28
E lesen csv file column by column Java Basics - Anfänger-Themen 10
U Anhand von Ant ein War-File erstellen Java Basics - Anfänger-Themen 0
B Quellcode einelsen "line by line" (und abspeichern in file (txt) Java Basics - Anfänger-Themen 7
O Zip-File Inhalt einlesen Java Basics - Anfänger-Themen 3
V Erste Schritte Dateinamen aus einer FIle[] in eine List Java Basics - Anfänger-Themen 11
P Jar File Java Basics - Anfänger-Themen 3
B Probleme bei "Daten in CSV File schreiben". Java Basics - Anfänger-Themen 9
S CSV File - "Vergleichen und Sortieren" Java Basics - Anfänger-Themen 3
T Wieso kann ich das jar file nicht starten? Java Basics - Anfänger-Themen 5
S Resourcen-Dateien im Jar-File verfügbar machen (Intellij 14) Java Basics - Anfänger-Themen 14
A Wieso übergibt der nicht die bearbeitete txt file Java Basics - Anfänger-Themen 8
Ruvok Executable Jar File startet nicht Java Basics - Anfänger-Themen 3
R Ini File erstellen Java Basics - Anfänger-Themen 1
J file.lenght spinnt ab 50mb Java Basics - Anfänger-Themen 7
B sehr lange Srings in File schreiben Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben