break block by label

Status
Nicht offen für weitere Antworten.

didjitalist

Bekanntes Mitglied
ich entwickel schon ziemlich lange java, aber mir ist grad erst folgendes sprachkonstrukt aufgefallen:
Code:
BLOCK:
{
  // do stuff
  if( someCondition )
  {
    break BLOCK;
  }
  // more code
}
// wee, BLOCK exited prematurely!
ist das in den java konventionen so vorgesehen? erscheint mir irgendwie unsauber.
 
ist das in den java konventionen so vorgesehen?
könnte es denn sonst kompilieren?
erscheint mir irgendwie unsauber.
Es wird praktisch nirgends verwendet. Habe nie im Leben ein Stück "echten" code gesehen, wo sowas angewandt wurde. Da das verhalten ähnlich verwirrend wie bei GOTO ist, sollte man dieses konstrukt vermeiden bzw. 20 mal überlegen, bevor man es einsetzt (an dieser Stelle sollte maki auftauchen, und sagen, dass man da nichts zu überlegen braucht, und dass diese labels absolut verboten gehören 😉 , es gab schon 2-3 megalange philosophische Threads zu diesem Thema, fazit: "lass es lieber")
 
könnte es denn sonst kompilieren?
ich glaube nicht an die unfehlbarkeit von compiler implementierungen 😉

sehe in produktivcode öfters mal konstrukte, die ein halbes GOTO ersetzen sollen ( bspw. do{ ... }while(false); ), aber das mit den labels war mir neu. fand schon die do/while konstrukte gruselig, aber das mit den labels eröffnet ja ganze andere dimensionen nicht mehr nachvollziehbaren codes. glaub ich werd mal schnell paar coding conventions anpassen.
 
Damit sich etwas java compiler nennen darf (und davon gibt es ja zig), muss er endlose Tests und Zertifizierungen über sich ergehen lassen. Fehler im Compiler selbst, sind da sehr sehr sehr unwahrscheinlich.
 
mach "bei sun" draus und ich unterschreibs. hab in der vergangenheit aber die erfahrung machen müssen, dass man gegen andere compiler implementiert, wie beispielsweise eclipse, und der sun compiler deinen code plötzlich nicht mehr mag.
 
mach "bei sun" draus und ich unterschreibs. hab in der vergangenheit aber die erfahrung machen müssen, dass man gegen andere compiler implementiert, wie beispielsweise eclipse, und der sun compiler deinen code plötzlich nicht mehr.
Plötzlich nicht mehr... was? Der IBM Compiler arbeitet korrekt, oder kannst du ein Gegenbeispiel nennen?
Und seit wann implementiert man gegen einen Compiler?
 
Und seit wann implementiert man gegen einen Compiler?
ehrlich gesagt ist da eclipse das einzige beispiel, das ich nennen kann. und dabei speziell die mit java 1.5 eingeführten enums. die eclipse jungs haben offensichtlich die initialisierungsreihenfolge bei enums anders gelöst, als sun, weshalb die jdk compiler "eclipse" code u.U. nicht mehr mochten.

ist allerdings auch mein einziges beispiel für java compiler diskrepanzen, also eigentlich vernachlässigbar.
 
ehrlich gesagt ist da eclipse das einzige beispiel, das ich nennen kann. und dabei speziell die mit java 1.5 eingeführten enums. die eclipse jungs haben offensichtlich die initialisierungsreihenfolge bei enums anders gelöst, als sun, weshalb die jdk compiler "eclipse" code u.U. nicht mehr mochten.

ist allerdings auch mein einziges beispiel für java compiler diskrepanzen, also eigentlich vernachlässigbar.
Da du einem Sun Compiler kein Compilat fütterst, sondern Quelltext, macht das so keinen Sinn. Da musst du jetzt aber schon ein sehr konkretes Beispiel auf den Tisch pflanzen, das ich dir abnehme, das der IBM Compiler ein Programm akzeptiert, das der Sun Compiler nicht akzeptiert, sofern Compliance Level, Java Version, Compiler Flags,... identisch waren.
 
Code:
public enum Foo
{
  BLARGH( 0 );
  
  private static List<Integer> values;
  
  private Foo( int value )
  {
    if( values == null )
    {
       values = new ArrayList<Integer>();
    }
    values.add( Integer.valueOf( value ) );
  }
}
 
konkret wurde das problem mal, nachdem jemand unseren build server upgedatet hatte. denk mal der schelm hatte dann klammheimlich nen java 6 compiler im 1.5 compilance mode installiert, ohne mir bescheid zu sagen. ansonsten wärs ja nicht zu erklären.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben