Bug mit Parameternamen beim Überschreiben #306

Closed
opened 2024-03-24 23:19:04 +00:00 by i21023 · 0 comments
Collaborator

Beim Überschreiben einer Methode der Oberklasse gibt es aktuell den Bug, dass die Parameter der erbenden Klasse die gleichen Namen wie die Parameter der Oberklasse haben müssen.

Beispiel:

import java.lang.Integer;
import java.util.List;

class Foo{
    foo(List<Integer> a){}
}

class Bar extends Foo{

    @Override
    foo(List<Integer> b){
        b.add(1);
    }
}

Dieser Code führt zu der Fehlermeldung Exception in thread "main" de.dhbwstuttgart.bytecode.CodeGenException: Unknown symbol 'b'. Die Methode foo(List<Integer> b); scheint den Scope der Methode foo(List<Integer> a); der Oberklasse zu nutzen. So ist die lokale Variable a statt b in der Unterklasse bekannt.

Wenn in der Unterklasse die add-Funktion also auf der Variable a aufgerufen wird, die es in dem Scope gar nicht geben sollte, kompiliert der Code:

import java.lang.Integer;
import java.util.List;

class Foo{
    foo(List<Integer> a){}
}

class Bar extends Foo{

    @Override
    foo(List<Integer> b){
        a.add(1);
    }
}
Beim Überschreiben einer Methode der Oberklasse gibt es aktuell den Bug, dass die Parameter der erbenden Klasse die gleichen Namen wie die Parameter der Oberklasse haben müssen. **Beispiel:** ```java import java.lang.Integer; import java.util.List; class Foo{ foo(List<Integer> a){} } class Bar extends Foo{ @Override foo(List<Integer> b){ b.add(1); } } ``` Dieser Code führt zu der Fehlermeldung `Exception in thread "main" de.dhbwstuttgart.bytecode.CodeGenException: Unknown symbol 'b'`. Die Methode `foo(List<Integer> b);` scheint den Scope der Methode `foo(List<Integer> a);` der Oberklasse zu nutzen. So ist die lokale Variable a statt b in der Unterklasse bekannt. Wenn in der Unterklasse die add-Funktion also auf der Variable a aufgerufen wird, die es in dem Scope gar nicht geben sollte, kompiliert der Code: ```java import java.lang.Integer; import java.util.List; class Foo{ foo(List<Integer> a){} } class Bar extends Foo{ @Override foo(List<Integer> b){ a.add(1); } } ```
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#306
No description provided.