/*
* @ test / nodynamiccopyright /
* @ bug 8262891 8272776
* @ summary Check null handling for non - pattern switches .
* @ enablePreview
*/
public class NullSwitch {
public static void main(String[] args) {
new NullSwitch().switchTest();
}
void switchTest() {
assertEquals(0 , matchingSwitch1("" ));
assertEquals(1 , matchingSwitch1("a" ));
assertEquals(100 , matchingSwitch1(0 ));
assertEquals(-1 , matchingSwitch1(null ));
assertEquals(-2 , matchingSwitch1(0 .0 ));
assertEquals(0 , matchingSwitch2("" ));
assertEquals(1 , matchingSwitch2(null ));
assertEquals(1 , matchingSwitch2(0 .0 ));
assertEquals(0 , matchingSwitch3("" ));
assertEquals(1 , matchingSwitch3("a" ));
assertEquals(100 , matchingSwitch3(0 ));
assertEquals(-1 , matchingSwitch3(null ));
assertEquals(-2 , matchingSwitch3(0 .0 ));
assertEquals(0 , matchingSwitch5("" ));
assertEquals(1 , matchingSwitch5("a" ));
assertEquals(100 , matchingSwitch5(0 ));
assertEquals(-1 , matchingSwitch5(null ));
assertEquals(-2 , matchingSwitch5(0 .0 ));
assertEquals(0 , matchingSwitch6("" ));
assertEquals(1 , matchingSwitch6(null ));
assertEquals(1 , matchingSwitch6(0 .0 ));
assertEquals(0 , matchingSwitch7("" ));
assertEquals(1 , matchingSwitch7("a" ));
assertEquals(100 , matchingSwitch7(0 ));
assertEquals(-1 , matchingSwitch7(null ));
assertEquals(-2 , matchingSwitch7(0 .0 ));
assertEquals(0 , matchingSwitch8("" ));
assertEquals(1 , matchingSwitch8(null ));
assertEquals(1 , matchingSwitch8(0 .0 ));
assertEquals(0 , matchingSwitch9a("" ));
assertEquals(1 , matchingSwitch9a(null ));
assertEquals(1 , matchingSwitch9a(0 .0 ));
assertEquals(0 , matchingSwitch10a("" ));
assertEquals(1 , matchingSwitch10a(null ));
assertEquals(1 , matchingSwitch10a(0 .0 ));
assertEquals(0 , matchingSwitch9b("" ));
assertEquals(2 , matchingSwitch9b(null ));
assertEquals(1 , matchingSwitch9b(0 .0 ));
assertEquals(0 , matchingSwitch10b("" ));
assertEquals(2 , matchingSwitch10b(null ));
assertEquals(1 , matchingSwitch10b(0 .0 ));
assertEquals(0 , matchingSwitch11("" ));
assertEquals(2 , matchingSwitch11(null ));
assertEquals(1 , matchingSwitch11(0 .0 ));
assertEquals(0 , matchingSwitch12("" ));
assertEquals(2 , matchingSwitch12(null ));
assertEquals(1 , matchingSwitch12(0 .0 ));
assertEquals(0 , matchingSwitch13("" ));
assertEquals(1 , matchingSwitch13(0 .0 ));
assertEquals(2 , matchingSwitch13(null ));
// record classes and null
assertEquals(1 , matchingSwitch14(new R(null )));
assertEquals(2 , matchingSwitch15(new R(null )));
}
class Super {}
class Sub extends Super {}
record R(Super s) {}
private int matchingSwitch14(R r) {
return switch (r) {
case R(Super s) -> 1 ;
default -> 2 ;
};
}
private int matchingSwitch15(R r) {
return switch (r) {
case R(Sub s) -> 1 ;
default -> 2 ;
};
}
private int matchingSwitch1(Object obj) {
return switch (obj) {
case String s -> s.length();
case Integer i -> 100 + i;
case null -> -1 ;
default -> -2 ;
};
}
private int matchingSwitch2(Object obj) {
return switch (obj) {
case String s -> 0 ;
case null , default -> 1 ;
};
}
private int matchingSwitch3(Object obj) {
return switch (obj) {
case String s -> s.length();
case Integer i -> 100 + i;
case null -> -1 ;
default -> -2 ;
};
}
private int matchingSwitch5(Object obj) {
return switch (obj) {
case String s: yield s.length();
case null : yield -1 ;
case Integer i: yield 100 + i;
default : yield -2 ;
};
}
private int matchingSwitch6(Object obj) {
return switch (obj) {
case String s: yield 0 ;
case null : yield 1 ;
default : yield 1 ;
};
}
private int matchingSwitch7(Object obj) {
return switch (obj) {
case String s: yield s.length();
case Integer i: yield 100 + i;
case null : yield -1 ;
default : yield -2 ;
};
}
private int matchingSwitch8(Object obj) {
return switch (obj) {
case String s: yield 0 ;
case null :
default : yield 1 ;
};
}
private int matchingSwitch9a(Object obj) {
return switch (obj) {
case String s: yield 0 ;
case null : yield 1 ;
case Object o: yield 1 ;
};
}
private int matchingSwitch10a(Object obj) {
switch (obj) {
case String s: return 0 ;
case null : return 1 ;
case Object o: return 1 ;
}
}
private int matchingSwitch9b(Object obj) {
try {
return switch (obj) {
case String s: yield 0 ;
case Object o: yield 1 ;
};
} catch (NullPointerException ex) {
return 2 ;
}
}
private int matchingSwitch10b(Object obj) {
try {
switch (obj) {
case String s: return 0 ;
case Object o: return 1 ;
}
} catch (NullPointerException ex) {
return 2 ;
}
}
private int matchingSwitch11(Object obj) {
try {
return switch (obj) {
case String s: yield 0 ;
default : yield 1 ;
};
} catch (NullPointerException ex) {
return 2 ;
}
}
private int matchingSwitch12(Object obj) {
try {
switch (obj) {
case String s: return 0 ;
default : return 1 ;
}
} catch (NullPointerException ex) {
return 2 ;
}
}
private int matchingSwitch13(Object obj) {
try {
switch (obj) {
case String s: return 0 ;
default : return 1 ;
}
} catch (NullPointerException ex) {
return 2 ;
}
}
static void assertEquals(int expected, int actual) {
if (expected != actual) {
throw new AssertionError("Expected: " + expected + ", actual: " + actual);
}
}
}
Messung V0.5 in Prozent C=95 H=93 G=93
¤ Dauer der Verarbeitung: 0.2 Sekunden
¤
*© Formatika GbR, Deutschland