Wildcards Instanzierungen in Generics die in Feldern eingesetzt werden #352

Open
opened 2024-11-12 12:55:42 +00:00 by pl · 0 comments
Owner
class Box<A> {

    A elem;
    void set(A a){}
    A get () {return elem;}
}

class BBox<X> {
    Box<Box<X>> boxed;

   BBox(Box<Box<X>> boxed) {
      this.boxed = boxed;
    }

    BBox<?> getBBox(){
	    return new BBox<String>(new Box<Box<String>>());
    }

    void m() {
	  //Box<Box<?>> x = b.boxed; //UNSOUND, wäre in Java-TX möglich
	  Box<? extends Box<?>> x = b.boxed; //es müsste dies gelten. was Java-TX nicht fordert
    }
}

Das Problem ist, dass im Konstruktor folgendes unifizert wird: ''BBox<BBox> <. BBox<BBox>''.
Das führt zu X =. X. Hier darf kein Wildcard mehr eingesetzt werden. Man könnte es durch die Einführung eines "reflexiven Bounds" lösen:
Das Problem könnte gelöst werden indem man ''class BBox { ... }''. Hier dürfte dann keine Wildcard eingesetzt werden, weil der Wildcard nicht reflexiv ist (vergleiche Paper: "Featherweight Java-TX: A Minimal Core Calculus for Java-TX").

```java class Box<A> { A elem; void set(A a){} A get () {return elem;} } class BBox<X> { Box<Box<X>> boxed; BBox(Box<Box<X>> boxed) { this.boxed = boxed; } BBox<?> getBBox(){ return new BBox<String>(new Box<Box<String>>()); } void m() { //Box<Box<?>> x = b.boxed; //UNSOUND, wäre in Java-TX möglich Box<? extends Box<?>> x = b.boxed; //es müsste dies gelten. was Java-TX nicht fordert } } ``` Das Problem ist, dass im Konstruktor folgendes unifizert wird: ''BBox<BBox<X>> <. BBox<BBox<X>>''. Das führt zu X =. X. Hier darf kein Wildcard mehr eingesetzt werden. Man könnte es durch die Einführung eines "reflexiven Bounds" lösen: Das Problem könnte gelöst werden indem man ''class BBox<X extends X> { ... }''. Hier dürfte dann keine Wildcard eingesetzt werden, weil der Wildcard nicht reflexiv ist (vergleiche Paper: "Featherweight Java-TX: A Minimal Core Calculus for Java-TX").
dholle was assigned by pl 2024-11-12 12:56:33 +00:00
pl self-assigned this 2024-11-12 12:56:33 +00:00
dholle was unassigned by pl 2024-11-12 12:57:12 +00:00
pl removed their assignment 2024-11-12 12:57:15 +00:00
dholle was assigned by pl 2024-11-12 12:57:22 +00:00
pl self-assigned this 2024-11-12 12:57:30 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: JavaTX/JavaCompilerCore#352
No description provided.