Es sind keine Methoden, sondern variabelnWarum sind Methoden pathSeparator() und separator() ohne Klammern?
array.length ist eine extra in die Syntax der Sprache eingebaut Spezialbehandlung.Ist array.length ohne Klammer auch Variable?
length
auf einem Array ist nicht direkt ein Feld, wie Felder in anderen Klassen, und verhält sich auch anders, ist zum Beispiel nicht aufzählbar per Reflection.Wieso?Es ist an für sich unsinnig, konstante Konstanten in Methode zu verlagern.
ja, eine konstante.Ist eine Objektvariable
Auch falsch. Kannst length zb nicht in einen Switch case benutzen.Es ist nur wichtig, zu beachten, dass man mit array.length wie mit einer Konstante umgehen kann
Dann erfinde diesbezüglich doch bitte nicht irgendwas, dann brauchen wir auch keine DiskussionWie es intern realisiert wurde, ist dabei unerheblich.
wieso sollte das nicht funktionieren... du hast heute noch nichts sinnvolles geschrieben, imho.Kannst length zb nicht in einen Switch case benutzen
Funktioniert halt nicht weil es eben keine Konstante ist.wieso sollte das nicht funktionieren... du hast heute noch nichts sinnvolles geschrieben, imho.
Das Vorgehen ist wie bei allen anderen Variablen auch, die sich ändern könnten, das heißt man braucht hier eine zusätzliche final Variable (bzw. effective final), womit dann das switch-case verwendet wird.Dann versuch mal ein case myArray.length![]()
Du solltest das mal deinem Vorredner erzählen, der behauptet hat, es wäre eine Konstante.Das Vorgehen ist wie bei allen anderen Variablen auch, die sich ändern könnten, das heißt man braucht hier eine zusätzliche final Variable (bzw. effective final), womit dann das switch-case verwendet wird.
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;
}
}
}
Da stellt ein Array doch aber keine Sonderrolle dar.Im case teil - nicht im switch.
Nein, es geht um eine Verwendung im case - und da muss es eine constant expression sein. Da reicht dann auch nicht eine effective final Variable. Siehe https://docs.oracle.com/javase/specs/jls/se19/html/jls-15.html#jls-15.29Und, ihr wollt mich doch veräppeln
Noch mal zum Mitschreiben. Du hast behauptet der Zugriff auf .length wäre identisch zu dem Zugriff auf eine Konstante.Da stellt ein Array doch aber keine Sonderrolle dar.
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;
}
}
}
/MyClass.java:10: error: constant expression required
case myArray.length:
^
/MyClass.java:13: error: constant expression required
case ifc.x:
^
2 errors
Nein, das ist falsch, identisch mit dem Zugriff auf eine Konstante in einer Klasse.Noch mal zum Mitschreiben. Du hast behauptet der Zugriff auf .length wäre identisch zu dem Zugriff auf eine Konstante.
Damit müsste es im case Teil eines switch Statements funktionieren.
Nächstes mal tarne ich michWieso 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 aufschlugWieso braucht Tobias mit einem neuen Account eigentlich nur drei Nachrichten zu schreiben, und schon ist klar, wer er ist?
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;
}
}
}
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:InnerFx.x ist ja keine Konstante, x ist an eine InnerFC Instanz geknüpft
Nächstes mal tarne ich mich![]()
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
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.
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.Hmmm... dann sollten wir zusammen mit ihm nochmal näher überlegen, welche Strategie für ihn denn Sinn macht, um nicht erkannt zu werden.
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 ...Es ist halt ein "const field". Aber es ist keine "static constant variable"
So etwas wie ein "const field" gibt es nicht in Java.Dennoch verhält sich myArray.length ja nicht anders als ein const field.
Pun intended?Use-Case ...
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:So etwas wie ein "const field" gibt es nicht in Java.
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
Wieso braucht Tobias mit einem neuen Account eigentlich nur drei Nachrichten zu schreiben, und schon ist klar, wer er ist?
du hast heute noch nichts sinnvolles geschrieben
Nächstes mal tarne ich mich![]()
Nein, weil ich Defizite nicht nur erkenne, sondern sie auch anspreche. Für die Kritikunfähigkeit der Anderen und die argumentative Unzugänglichkeit vieler kann ich aber nichts. Solche Defizite entstehen aber schon in der frühen Erziehung, daran kann man dann im Erwachsenenalter kaum etwas ändern.Weil er immer sehr schnell persönlich wird
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!argumentative Unzugänglichkeit
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.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.