Java Quiz

ich dachte man kann Integer nicht implizit zu primitiven casten? :stuck_out_tongue:

Edit: ah doch, gerade ausprobiert, geht ja doch…

Ja, wenn man die assignment conversion bzw. boxing/unboxing dazunimmt, könnte da z.B. auch ‘int’ stehen - aber das macht eigentlich keinen Unterschied. Es ging um supertypen, in dem Sinne, dass der ‘Integer’ einer Variable dieses Typs zuweisbar ist. Also: Wie viele Möglichkeiten gibt es, für das ‘???’ etwas einzusetzen, so, dass es compiliert?

10, ohne autounboxing. Mit autounboxing sind es 13 (wenn ich nicht einen primitiven Typen vergessen habe).

Ausführlicher
[spoiler]Integer, Number, Object, Serializable, Comparable, Comparable, Comparable<?>, Comparable<? extends Integer>, Comparable<? super Integer>, Comparable<? extends Number>, Comparable<? extends Object> ;-)[/spoiler]

@cmdrudolph auf Generics bin ich ja noch garnicht gekommen

Meine Antwort daher unendlich viele, da

Spoiler
[spoiler]Comparable<? extends Comparable> b = a;
Comparable<? extends Comparable<? extends Comparable>> b = a;
Comparable<? extends Comparable<? extends Comparable<? extends Comparable>>> b = a;
[/spoiler]

alleine schon unendlich oft mit dem wohl ersichtlichen Muster erweitert werden kann.

Majora hat Recht. Aus genau diesem Grund. Und jetzt die Mega-Knaller-Bonus-Preisfrage: Mit welchem Fehler ist wohl meine Methode, mit der ich die Menge aller supertypen berechne(n wollte?), abgekachelt? :wink: (So ein Dreck. Damit wird das erstmal richtig kompliziert. Mal schauen, ob ich da noch eine elegante Lösung finde…)

EDIT: Die sich daraus ergebende Diskussion mal nach http://forum.byte-welt.net/threads/10766-Bestimmung-der-Menge-aller-Supertypen-eines-Typs abgetrennt

Tut mir Leid dass ich da jetzt nochmal das alte Thema aufgreife aber eine Sache zur Definition von NaN ist mir da noch eingefallen

[QUOTE=Natac]Begründung: NaN-Werte sind darüber definiert, dass sie ungleich zu sich selbst sind. Wird einem spätestens dann bewusst, wenn man sich mal die Implementierung von Double.isNaN(double v) anguckt:static public boolean isNaN(double v) { return (v != v); }[/QUOTE]

Die Idee dazu kommt (natürlich :smiley: ) aus der Mathematik: Jede Zahl ist in einer Menge enthalten (natürliche Zahlen, reelle Zahlen, …). Ist ein Wert x NaN, also keine Zahl, dann ist er logischerweise in keiner dieser Mengen, sondern (das hört sich jetzt doch sehr paradox an) in der leeren Menge, also die Menge dich nichts enthält (Da x keine Zahl ist geht das, denn die leere Menge enthält ja keine Zahlen :stuck_out_tongue: ).

Jetzt ist aber jede Aussage über die leere Menge richtig (wirklich JEDE!). D.h. insbesondere gilt für alle Elemente y aus der leeren Menge, dass y!=y ist. Diese Aussage kann nur für Elemente aus der leeren Menge gelten, für jedes Element anderer Mengen aber nicht (Da jede Zahl zu sich selbst gleich ist). Ist also x NaN, dann ist dies die einfachste zutreffende Aussage für x.

SIDE NOTE: Man könnte statt x!=x in Double.isNaN so ziemlich jede (für „echte Zahlen“ falsche) Aussage implementieren (x+1=x,…), aber das würde ja alles Rechenaufwand bedeuten.

Jetzt wurde hoffentlich wirklich alles gesagt, wie gesagt tut mir Leid dass ich das so hervorgegraben hab aber das war mir gerade irgendwie noch wichtig…

Mal wieder ein neues Raetsel. Was muss man statt den Fragezeichen einsetzen damit die if true ergibt und YES ausgegeben wird.
Die Loesung die gesucht ist, ist nicht a.superHashCode().



    public static void main(String ... args){
        A a= new A();
        int hash = ???
        if (hash == a.superHashCode()){
            System.out.println("YES");
        }        
    }

    private static class A{
        public int superHashCode(){
            return super.hashCode();
        }

        public int hashCode(){
            return -1;
        }
    }
}```

LG

Wie wäre es mit
"
[spoiler]System.identityHashCode(a);[/spoiler]

Jep richtig

Wahrscheinlich zu einfach:

public class User {
  Boolean blocked = null;

  [...]

  public Boolean isBlocked() {
    return blocked;
  }
}

[...]
  
public Boolean editingIsLocked(User user) {
 return (null == user || user.isBlocked());
}

[...]

editingIsLocked(new User());

Was gibt uns editingIsLocked() beim Aufruf in 20 zurück?

einen Compile error , da ein Parameter fehlt

Ach, Mist. Ist korrigiert, sorry.

Ansonsten ein NPE ? (wenn man public Boolean editingIsLocked(User user) ändert)

Es war
public Boolean editingIsLocked(User user) {
gemeint. Zu dem, was gemeint war: Mein erster Gedanke war der richtige, aber habe es dann nochmal ausprobiert, weil ich (hauptsächlich aufgrund der Frage an sich :rolleyes: ) gerade nicht sicher war, ob es bei Boolean vielleicht irgendeine Ausnahme gibt…

EDIT: Blöde Formulierung - es GAB ja eine Ausnahme:smiley: Hoffentlich klar, was gemeint war :smiley:

Ja, NPE ist richtig.

Darum empfiehlt es sich nie mit Boolean zu arbeiten, sondern nur mit boolean. Falls man doch mal ein Object braucht funktioniert Auto Boxing

List list = new ArrayList();
list.add(list);
System.out.println(list);

Was passiert?

EDIT: Der post ist durch einen seltsamen redicrect-glitch erst im falschen Thread gelandet …

EDIT2: Und das automatischen Edit-Zusammenfassen greift/griff hier offenbar nicht :rolleyes:

Interessant. Hätte ich so nicht erwartet.

Was wohl eher den Erwartungen entspricht ist folgendes:

List list2 = new ArrayList();
list.add(list2);
list2.add(list);
System.out.println(list);```

Vielleicht noch als Kontext: Gesehen hatte ich das schonmal irgendwann, vor Jahren, und dass in der Doku auch irgendwo steht “Sets sollten sich nicht selbst enthalten, weil sonst eine Raumzeit-Singulatität auftritt und das Universum explodiert” (oder so) wußte ich noch, aber dass ich das mit den Lists nochmal ausprobiert hatte, war aufgrund von http://forum.byte-welt.net/threads/10908-toString()-überschreiben?p=77061&viewfull=1#post77061