Skip to content

Commit cd51a8c

Browse files
committed
Adding Super Type Token
1 parent 4909263 commit cd51a8c

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.baeldung.supertype;
2+
3+
import java.lang.reflect.ParameterizedType;
4+
import java.lang.reflect.Type;
5+
6+
public abstract class TypeReference<T> {
7+
8+
private final Type type;
9+
10+
public TypeReference() {
11+
Type superclass = getClass().getGenericSuperclass();
12+
type = ((ParameterizedType) superclass).getActualTypeArguments()[0];
13+
}
14+
15+
public Type getType() {
16+
return type;
17+
}
18+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.baeldung.supertype;
2+
3+
import org.junit.Test;
4+
5+
import java.lang.reflect.ParameterizedType;
6+
import java.lang.reflect.Type;
7+
import java.util.Map;
8+
9+
import static org.junit.Assert.assertEquals;
10+
11+
public class TypeReferenceUnitTest {
12+
13+
@Test
14+
public void givenGenericToken_whenUsingSuperTypeToken_thenPreservesTheTypeInfo() {
15+
TypeReference<Map<String, Integer>> token = new TypeReference<Map<String, Integer>>() {};
16+
Type type = token.getType();
17+
18+
assertEquals("java.util.Map<java.lang.String, java.lang.Integer>", type.getTypeName());
19+
20+
Type[] typeArguments = ((ParameterizedType) type).getActualTypeArguments();
21+
assertEquals("java.lang.String", typeArguments[0].getTypeName());
22+
assertEquals("java.lang.Integer", typeArguments[1].getTypeName());
23+
}
24+
}

0 commit comments

Comments
 (0)