Language
overload: wideningはboxingより先に選ばれる
shortをlongとIntegerのoverloadへ渡すと、boxingではなくprimitive wideningのlongが選ばれます。
SourceOverloadChoices.java
Java 21
package examples.overload;
public final class OverloadChoices {
private OverloadChoices() {}
public static String select(long value) {
return "long";
}
public static String select(Integer value) {
return "Integer";
}
}TestOverloadChoicesTest.java
Java 21
package examples.overload;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
class OverloadChoicesTest {
@Test
void primitiveのshortはboxingよりwideningを優先してlongを選ぶ() {
short value = 1;
assertEquals("long", OverloadChoices.select(value));
}
@Test
void Integer参照はIntegerのoverloadを選ぶ() {
assertEquals("Integer", OverloadChoices.select(Integer.valueOf(1)));
}
}01Assertion
このテストで確認できること
- shortの引数はlongのoverloadを選ぶ
- Integer参照はIntegerのoverloadを選ぶ
overloadの選択は実行時の値ではなくコンパイル時の静的型と変換規則で決まります。似たoverloadを増やすと呼び先が読みづらくなります。
OBSERVED RESULT
short → long
Integer → Integer