我正在学习 Java 中的反射。偶然间,我发现了以下对我来说意想不到的行为。
下面写的两个测试都成功。
class NewInstanceUsingReflection {
@Test
void testClassNewInstance()
throws NoSuchMethodException, InvocationTargetException,
InstantiationException, IllegalAccessException
{
final var input = "A string";
final var theClass = input.getClass();
final var constructor = theClass.getConstructor();
final String newString = constructor.newInstance();
assertEquals("", newString);
}
@Test
void testClassNewInstanceWithVarOnly()
throws NoSuchMethodException, InvocationTargetException,
InstantiationException, IllegalAccessException
{
final var input = "A string";
final var theClass = input.getClass();
final var constructor = theClass.getConstructor();
final var newString = constructor.newInstance();
assertEquals("A string", newString);
}
}
Run Code Online (Sandbox Code Playgroud)
除了断言之外的唯一区别是变量类型在第一个测试中是显式的,并在第二个测试中newString
声明。var
我正在使用 …