@SuppressWarnings({"unchecked"}) public T createInstance(String managerClassName) { Class managerClass = ReflectionUtil.loadClass(managerClassName); if (managerClass == null) { logger.warn("Cannot load class: {}", managerClassName); managerClass = defaultImplClass; } if (!clazz.isAssignableFrom(managerClass)) { logger.warn("Cannot use as {}: {}", clazz.getName(), managerClassName); managerClass = defaultImplClass; } logger.debug("Using class: {}", managerClass.getName()); T instance = (T) ReflectionUtil.newInstance(managerClass); if (instance == null) { logger.warn( "Cannot instanciate: {}. Fall back to default: {}.", managerClass.getName(), FieldsManager.class.getName()); instance = (T) ReflectionUtil.newInstance(defaultImplClass); if (instance == null) { logger.error("Cannot instanciate: {}", defaultImplClass.getName()); } } logger.debug("Installed {0}: {1}", clazz.getName(), instance); return instance; }
@Test public void testNewInstance() { String foo = ReflectionUtil.newInstance(String.class); assertNotNull(foo); Foo1 foo1 = ReflectionUtil.newInstance(Foo1.class); assertNotNull(foo1); Foo2 foo2 = ReflectionUtil.newInstance(Foo2.class); assertNotNull(foo2); Foo3 foo3 = ReflectionUtil.newInstance(Foo3.class); assertNotNull(foo3); class FooConverter implements Converter<FooConverter, ConverterInvocation> { @Override public FooConverter convert(ConverterInvocation input) { return this; } } FooConverter foo4 = ReflectionUtil.newInstance(FooConverter.class); assertNotNull(foo4); }
@Test(expected = RuntimeException.class) public void testExceptionWithConstructorWithMoreThanOneParam() { Foo4 foo4 = ReflectionUtil.newInstance(Foo4.class); }
@Test public void testNewInstanceWithClassWithManyConstructors() { Foo5 foo5 = ReflectionUtil.newInstance(Foo5.class); }