mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
TypeUtil.getClass方法强转报错问题
This commit is contained in:
parent
5d8a411453
commit
74452eb775
@ -40,7 +40,10 @@ public class TypeUtil {
|
||||
} else if (type instanceof ParameterizedType) {
|
||||
return (Class<?>) ((ParameterizedType) type).getRawType();
|
||||
} else if (type instanceof TypeVariable) {
|
||||
return (Class<?>) ((TypeVariable<?>) type).getBounds()[0];
|
||||
Type[] bounds = ((TypeVariable<?>) type).getBounds();
|
||||
if (bounds.length == 1) {
|
||||
return getClass(bounds[0]);
|
||||
}
|
||||
} else if (type instanceof WildcardType) {
|
||||
final Type[] upperBounds = ((WildcardType) type).getUpperBounds();
|
||||
if (upperBounds.length == 1) {
|
||||
|
@ -1,48 +1,61 @@
|
||||
package cn.hutool.core.util;
|
||||
|
||||
import lombok.Data;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import lombok.Data;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class TypeUtilTest {
|
||||
|
||||
|
||||
@Test
|
||||
public void getEleTypeTest() {
|
||||
Method method = ReflectUtil.getMethod(TestClass.class, "getList");
|
||||
Type type = TypeUtil.getReturnType(method);
|
||||
Assert.assertEquals("java.util.List<java.lang.String>", type.toString());
|
||||
|
||||
|
||||
Type type2 = TypeUtil.getTypeArgument(type);
|
||||
Assert.assertEquals(String.class, type2);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getParamTypeTest() {
|
||||
Method method = ReflectUtil.getMethod(TestClass.class, "intTest", Integer.class);
|
||||
Type type = TypeUtil.getParamType(method, 0);
|
||||
Assert.assertEquals(Integer.class, type);
|
||||
|
||||
|
||||
Type returnType = TypeUtil.getReturnType(method);
|
||||
Assert.assertEquals(Integer.class, returnType);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getClasses() {
|
||||
Method method = ReflectUtil.getMethod(Parent.class, "getLevel");
|
||||
Type returnType = TypeUtil.getReturnType(method);
|
||||
Class clazz = TypeUtil.getClass(returnType);
|
||||
Assert.assertEquals(Level1.class, clazz);
|
||||
|
||||
method = ReflectUtil.getMethod(Level1.class, "getId");
|
||||
returnType = TypeUtil.getReturnType(method);
|
||||
clazz = TypeUtil.getClass(returnType);
|
||||
Assert.assertEquals(Object.class, clazz);
|
||||
}
|
||||
|
||||
public static class TestClass {
|
||||
public List<String> getList(){
|
||||
public List<String> getList() {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
public Integer intTest(Integer integer) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTypeArgumentTest(){
|
||||
public void getTypeArgumentTest() {
|
||||
// 测试不继承父类,而是实现泛型接口时是否可以获取成功。
|
||||
final Type typeArgument = TypeUtil.getTypeArgument(IPService.class);
|
||||
Assert.assertEquals(String.class, typeArgument);
|
||||
@ -59,25 +72,29 @@ public class TypeUtilTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getActualTypesTest(){
|
||||
public void getActualTypesTest() {
|
||||
// 测试多层级泛型参数是否能获取成功
|
||||
Type idType = TypeUtil.getActualType(Level3.class,
|
||||
ReflectUtil.getField(Level3.class, "id"));
|
||||
Type idType = TypeUtil.getActualType(Level3.class, ReflectUtil.getField(Level3.class, "id"));
|
||||
|
||||
Assert.assertEquals(Long.class, idType);
|
||||
}
|
||||
|
||||
public static class Level3 extends Level2<Level3>{
|
||||
public static class Level3 extends Level2<Level3> {
|
||||
|
||||
}
|
||||
|
||||
public static class Level2<E> extends Level1<Long>{
|
||||
public static class Level2<E> extends Level1<Long> {
|
||||
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Level1<T>{
|
||||
public static class Level1<T> {
|
||||
private T id;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Parent<T extends Level1<B>, B extends Long> {
|
||||
private T level;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user