Skip to content

Instantly share code, notes, and snippets.

@kamatama41
Created June 4, 2012 13:06
Show Gist options
  • Save kamatama41/2868251 to your computer and use it in GitHub Desktop.
Save kamatama41/2868251 to your computer and use it in GitHub Desktop.
Compare Class#getInterfaces() with org.springframework.util.ClassUtils#getAllInterfaces()
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.util.ClassUtils;
public class GetAllInterfacesTest {
@Test
public void getInterfaceTest() throws Exception {
Class<?>[] interfaces = new ConcreteClass1().getClass().getInterfaces();
assertEquals(0, interfaces.length);
}
@Test
public void UseClassUtils() throws Exception {
Class[] allInterfaces = ClassUtils.getAllInterfaces(new ConcreteClass1());
assertEquals(Interface1.class, allInterfaces[0]);
}
@Test
public void ParentsAndChildImplementsDifferentClass() throws Exception {
Class[] allInterfaces = ClassUtils.getAllInterfaces(new ConcreteClass2());
// child->parent
assertEquals(Interface2.class, allInterfaces[0]);
assertEquals(Interface3.class, allInterfaces[1]);
assertEquals(Interface1.class, allInterfaces[2]);
allInterfaces = ClassUtils.getAllInterfaces(new ConcreteClass3());
// declare order
assertEquals(Interface3.class, allInterfaces[0]);
assertEquals(Interface2.class, allInterfaces[1]);
assertEquals(Interface1.class, allInterfaces[2]);
}
@Test
public void ParentsAndChildImplementsSameClass() throws Exception {
Class[] allInterfaces = ClassUtils.getAllInterfaces(new ConcreteClass4());
// exclude same class
assertEquals(2, allInterfaces.length);
assertEquals(Interface1.class, allInterfaces[0]);
assertEquals(Interface2.class, allInterfaces[1]);
}
@Test
public void VariableDeclarationIsInterface() throws Exception {
Interface1 instance = new ConcreteClass4();
Class[] allInterfaces = ClassUtils.getAllInterfaces(instance);
assertEquals(2, allInterfaces.length);
assertEquals(Interface1.class, allInterfaces[0]);
assertEquals(Interface2.class, allInterfaces[1]);
}
@Test
public void ThreeLayerClass() throws Exception {
Class[] allInterfaces = ClassUtils.getAllInterfaces(new ConcreteClass5());
assertEquals(3, allInterfaces.length);
assertEquals(Interface3.class, allInterfaces[0]);
assertEquals(Interface1.class, allInterfaces[1]);
assertEquals(Interface2.class, allInterfaces[2]);
}
private static interface Interface1 {
}
private static interface Interface2 {
}
private static interface Interface3 {
}
private static abstract class AbstractClass implements Interface1 {
}
private static class ConcreteClass1 extends AbstractClass {
}
private static class ConcreteClass2 extends AbstractClass implements Interface2, Interface3 {
}
private static class ConcreteClass3 extends AbstractClass implements Interface3, Interface2 {
}
private static class ConcreteClass4 extends AbstractClass implements Interface1, Interface2 {
}
private static class ConcreteClass5 extends ConcreteClass4 implements Interface3 {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment