diff --git a/core-java-modules/core-java-lang-5/pom.xml b/core-java-modules/core-java-lang-5/pom.xml index 6d3771bd31..549f307aee 100644 --- a/core-java-modules/core-java-lang-5/pom.xml +++ b/core-java-modules/core-java-lang-5/pom.xml @@ -13,6 +13,7 @@ core-java-modules 0.0.1-SNAPSHOT + core-java-lang-5 @@ -24,4 +25,18 @@ + + + org.apache.commons + commons-lang3 + 3.12.0 + + + + org.reflections + reflections + 0.10.2 + + + \ No newline at end of file diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java new file mode 100644 index 0000000000..414f421da3 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java @@ -0,0 +1,5 @@ +package com.baeldung.checkInterface; + +public class ChildClass1 implements ChildInterface1 { + +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java new file mode 100644 index 0000000000..568c7b57c7 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java @@ -0,0 +1,5 @@ +package com.baeldung.checkInterface; + +public class ChildClass2 implements ChildInterface2 { + +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java new file mode 100644 index 0000000000..02f87d1901 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java @@ -0,0 +1,5 @@ +package com.baeldung.checkInterface; + +public interface ChildInterface1 extends MasterInterface { + +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java new file mode 100644 index 0000000000..80a5915b27 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java @@ -0,0 +1,5 @@ +package com.baeldung.checkInterface; + +public interface ChildInterface2 extends MasterInterface { + +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java new file mode 100644 index 0000000000..133e8bb0a7 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java @@ -0,0 +1,5 @@ +package com.baeldung.checkInterface; + +public class MasterClass implements MasterInterface { + +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java new file mode 100644 index 0000000000..554816df4d --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java @@ -0,0 +1,5 @@ +package com.baeldung.checkInterface; + +public interface MasterInterface { + +} diff --git a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java new file mode 100644 index 0000000000..3a1f8ff2b6 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java @@ -0,0 +1,127 @@ +package com.baeldung.checkInterface; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang3.ClassUtils; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.reflections.ReflectionUtils; +import org.reflections.Reflections; + +public class CheckInterfaceUnitTest { + + protected static Reflections reflections; + + @BeforeAll + public static void initializeReflectionsLibrary() { + + reflections = new Reflections("com.baeldung.checkInterface"); + } + + @Test + public void whenUsingReflectionGetInterfaces_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + List> interfaces = Arrays.asList(childClass2.getClass().getInterfaces()); + + assertTrue(interfaces.contains(ChildInterface2.class)); + } + + @Test + public void whenUsingReflectionGetInterfaces_thenParentInterfaceIsNotFound() { + + ChildClass2 childClass2 = new ChildClass2(); + List> interfaces = Arrays.asList(childClass2.getClass().getInterfaces()); + + assertFalse(interfaces.contains(MasterInterface.class)); + } + + @Test + public void whenUsingReflectionIsAssignableFrom_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(ChildInterface2.class.isAssignableFrom(childClass2.getClass())); + } + + @Test + public void whenUsingReflectionIsAssignableFrom_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(MasterInterface.class.isAssignableFrom(childClass2.getClass())); + } + + @Test + public void whenUsingReflectionIsInstance_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(ChildInterface2.class.isInstance(childClass2)); + } + + @Test + public void whenUsingReflectionIsInstance_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(MasterInterface.class.isInstance(childClass2)); + } + + @Test + public void whenUsingReflectionInstanceOf_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(childClass2 instanceof ChildInterface2); + } + + @Test + public void whenUsingReflectionInstanceOf_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(childClass2 instanceof MasterInterface); + } + + @Test + public void whenUsingCommons_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + List> interfaces = ClassUtils.getAllInterfaces(childClass2.getClass()); + + assertTrue(interfaces.contains(ChildInterface2.class)); + } + + @Test + public void whenUsingCommons_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + List> interfaces = ClassUtils.getAllInterfaces(childClass2.getClass()); + + assertTrue(interfaces.contains(MasterInterface.class)); + } + + @Test + public void whenUsingReflections_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + Set> interfaces = reflections.get(ReflectionUtils.Interfaces.of(childClass2.getClass())); + + assertTrue(interfaces.contains(ChildInterface2.class)); + } + + @Test + public void whenUsingReflections_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + Set> interfaces = reflections.get(ReflectionUtils.Interfaces.of(childClass2.getClass())); + + assertTrue(interfaces.contains(MasterInterface.class)); + } +}