Fehler mit unitiliserten localen Variablen #15

Closed
opened 2016-05-04 00:13:43 +00:00 by pl · 2 comments
Owner

import java.util.Vector;

class Overloading{

method(Vector<String> v) {
	return 2;
}

method(Vector<Integer> v) {
	return 1;
}

main() {
	ol;
	ol = new Overloading();
	java.util.Vector<java.lang.String> v;
	//v IST NICHT INITIALISIERT
	return ol.method(v);

}

}

liefert bei der Ausführung von:

class MainOverloading {
public static void main(String[] args) {
Overloading ol = new Overloading();
Object i = ol.main();
System.out.println(i);
}
}

folgenden Fehler:

Exception in thread "main" java.lang.VerifyError: Bad local variable type
Exception Details:
Location:
Overloading.main()Ljava/lang/Number; @9: aload_3
Reason:
Type top (current frame, locals[3]) is not assignable to reference type
Current Frame:
bci: @9
flags: { }
locals: { 'Overloading', top, 'Overloading' }
stack: { 'Overloading' }
Bytecode:
0x0000000: bb00 0459 b700 194d 2c2d b600 1bb0

    at MainOverloading.main(MainOverloading.java:4)
import java.util.Vector; class Overloading{ method(Vector<String> v) { return 2; } method(Vector<Integer> v) { return 1; } main() { ol; ol = new Overloading(); java.util.Vector<java.lang.String> v; //v IST NICHT INITIALISIERT return ol.method(v); } } liefert bei der Ausführung von: class MainOverloading { public static void main(String[] args) { Overloading ol = new Overloading(); Object i = ol.main(); System.out.println(i); } } folgenden Fehler: Exception in thread "main" java.lang.VerifyError: Bad local variable type Exception Details: Location: Overloading.main()Ljava/lang/Number; @9: aload_3 Reason: Type top (current frame, locals[3]) is not assignable to reference type Current Frame: bci: @9 flags: { } locals: { 'Overloading', top, 'Overloading' } stack: { 'Overloading' } Bytecode: 0x0000000: bb00 0459 b700 194d 2c2d b600 1bb0 at MainOverloading.main(MainOverloading.java:4)

Ich hab einen Test geschrieben, der auch von Java ausgeführt werden kann.

import java.util.Vector;

class UninitializedVariable{

Integer method(Integer v) {
	return v;
}

public static void main(String[] args) {
	UninitializedVariable ol;
	ol = new UninitializedVariable();
	Integer v;
	ol.method(v);

}
}

Beim Compilieren mit java erscheint der folgende Fehler:

UninitializedVariable.java:13: error: variable v might not have been initialized
ol.method(v);
^
1 error

Ich hab einen Test geschrieben, der auch von Java ausgeführt werden kann. import java.util.Vector; class UninitializedVariable{ Integer method(Integer v) { return v; } public static void main(String[] args) { UninitializedVariable ol; ol = new UninitializedVariable(); Integer v; ol.method(v); } } Beim Compilieren mit java erscheint der folgende Fehler: UninitializedVariable.java:13: error: variable v might not have been initialized ol.method(v); ^ 1 error
Author
Owner

Das ist natürlich ein Argument. Halt ziemlich schlecht, dass der Compiler keinen Fehler gibt. So dass erst zur Laufzeit der Fehler kommt. Aber kann man wohl grad nichts machen.

Das ist natürlich ein Argument. Halt ziemlich schlecht, dass der Compiler keinen Fehler gibt. So dass erst zur Laufzeit der Fehler kommt. Aber kann man wohl grad nichts machen.
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 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#15
No description provided.