. getConstructorForArgs - , ( , , ). , "" isAssignableFrom ( , ).
public class ReflectionTest
{
public Constructor<?> getConstructorForArgs(Class<?> klass, Class[] args)
{
Constructor<?>[] constructors = klass.getConstructors();
for(Constructor<?> constructor : constructors)
{
Class<?>[] types = constructor.getParameterTypes();
if(types.length == args.length)
{
boolean argumentsMatch = true;
for(int i = 0; i < args.length; i++)
{
if(!types[i].isAssignableFrom(args[i]))
{
argumentsMatch = false;
break;
}
}
if(argumentsMatch)
{
return constructor;
}
}
}
return null;
}
@Test
public void testGetConstructorForArgs()
{
Assert.assertNull( getConstructorForArgs(HashSet.class, new Class[]{String.class}) );
Assert.assertNotNull( getConstructorForArgs(HashSet.class, new Class[]{}) );
Assert.assertNotNull( getConstructorForArgs(HashSet.class, new Class[]{int.class}) );
Assert.assertNotNull( getConstructorForArgs(HashSet.class, new Class[]{Collection.class}) );
Assert.assertNotNull( getConstructorForArgs(HashSet.class, new Class[]{HashSet.class}) );
Assert.assertNull( getConstructorForArgs(HashSet.class, new Class[]{Object.class}) );
Assert.assertNotNull( getConstructorForArgs(HashSet.class, new Class[]{int.class, float.class}) );
Assert.assertNull( getConstructorForArgs(HashSet.class, new Class[]{float.class, int.class}) );
}
}
. : : , , , , . , SomeClass , HashSet (A Collection -implementation) , , Collection , , HashSet as, , . , , isAssignableFrom, , .
source
share