Skip to content

Commit 81f2109

Browse files
committed
[BAEL-4532]a.getClass() vs A.class
1 parent 0b4a67e commit 81f2109

6 files changed

Lines changed: 81 additions & 0 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.baeldung.getclassobject;
2+
3+
public class Animal {
4+
protected int numberOfEyes;
5+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.baeldung.getclassobject;
2+
3+
public class Monkey extends Animal {
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.baeldung.getclassobject;
2+
3+
public abstract class SomeAbstractClass {
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.baeldung.getclassobject;
2+
3+
interface SomeInterface {
4+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.baeldung.getclassobject;
2+
3+
public class SomeUtils {
4+
private SomeUtils() {
5+
throw new RuntimeException("This Util class is not allowed to be instantiated!");
6+
}
7+
// public static utilMethods
8+
// ...
9+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.baeldung.getclassobject;
2+
3+
import org.junit.Test;
4+
5+
import static org.junit.Assert.*;
6+
7+
public class GetClassObjectUnitTest {
8+
@Test
9+
public void givenObjectAndType_whenGettingClassObject_thenTwoMethodsHaveTheSameResult() {
10+
String str = "I am an object of the String class";
11+
Class fromStrObject = str.getClass();
12+
Class clazz = String.class;
13+
assertSame(fromStrObject, clazz);
14+
}
15+
16+
@Test
17+
public void givenClassInheritance_whenGettingRuntimeTypeAndStaticType_thenGetDifferentResult() {
18+
Animal animal = new Monkey();
19+
Class runtimeType = animal.getClass();
20+
Class staticType = Animal.class;
21+
//Not equals
22+
assertNotEquals(staticType, runtimeType);
23+
24+
Class monkeyClass = Monkey.class;
25+
assertSame(runtimeType, monkeyClass);
26+
}
27+
28+
@Test
29+
public void givenPrimitiveType_whenGettingClassObject_thenOnlyStaticTypeWorks() {
30+
int number = 7;
31+
// Class numberClass = number.getClass(); <-- compilation error
32+
Class intType = int.class;
33+
34+
assertNotNull(intType);
35+
assertEquals("int", intType.getName());
36+
assertTrue(intType.isPrimitive());
37+
}
38+
39+
@Test
40+
public void givenTypeCannotInstantiate_whenGetTypeStatically_thenGetTypesSuccefully() {
41+
Class interfaceType = SomeInterface.class;
42+
Class abstractClassType = SomeAbstractClass.class;
43+
Class utilClassType = SomeUtils.class;
44+
45+
assertNotNull(interfaceType);
46+
assertTrue(interfaceType.isInterface());
47+
assertEquals("SomeInterface", interfaceType.getSimpleName());
48+
49+
assertNotNull(abstractClassType);
50+
assertEquals("SomeAbstractClass", abstractClassType.getSimpleName());
51+
52+
assertNotNull(utilClassType);
53+
assertEquals("SomeUtils", utilClassType.getSimpleName());
54+
}
55+
}

0 commit comments

Comments
 (0)