直接上代码:
父类:
import java.lang.reflect.ParameterizedType;
/**
* 要得到T.class,必须要有一个子类
*
*
* @param <T>
* @param <String>
*/
public class GenericTest<T,String> {
Class<T> entityClass;
/**
* 得到泛型参数的类型
*
*/
public GenericTest() {
ParameterizedType type = (ParameterizedType) this.getClass()
.getGenericSuperclass();
entityClass = (Class<T>) type.getActualTypeArguments()[1];
System.out.println("type=="+type);
System.out.println("entityClass=="+entityClass);
System.out.println("getOwnerType=="+type.getOwnerType());
System.out.println("getRawType=="+type.getRawType());
}
protected String getV() {
return null;
}
}
子类:
/**
* T.class是不存在的,所以的不到<br>
* 但是在父类中可以得到<Long, String>的具体类型。
*/
public class GenericTestChild<T> extends GenericTest<Long, String> {
Class<T> clazz;
public GenericTestChild() {
// ---T.class是不存在的,所以下面的代码会有错误
/**
* ParameterizedType type = (ParameterizedType) this.getClass()
* .getGenericSuperclass();
*
* clazz = (Class<T>) type.getActualTypeArguments()[0];
* System.out.println("type==" + type);
* System.out.println("entityClass==" + entityClass);
* System.out.println("getOwnerType==" + type.getOwnerType());
* System.out.println("getRawType==" + type.getRawType());
*/
}
public static void main(String args[]) {
GenericTestChild<Long> gt = new GenericTestChild<Long>();
}
}
分享到:
相关推荐
综上所述,虽然Java泛型在编译后会进行类型擦除,但通过上述技巧,我们仍然能够在运行时获得关于泛型类实例化类型的一些信息。在实际开发中,这些方法可以帮助我们编写更加灵活和安全的代码。在示例文件`GenericRTTI...
Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型父类: public interface SuperClass { String ...
在Java编程语言中,泛型是一种强大的特性,它允许我们在类、接口和方法中使用类型参数,从而提高代码的灵活性和可复用性。当我们谈论“java带两个类型参数的泛型”时,这意味着我们正在处理一个泛型类或泛型方法,...
Java泛型是Java编程语言中一个强大的特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。泛型的主要目标是提高代码的类型安全性和重用性,减少类型转换的麻烦,并在编译时捕获可能的类型错误。...
本文将深入探讨Java泛型类型擦除的概念,并介绍在类型擦除后,为了保持泛型的安全性和便利性,Java设计者所采取的一些补偿机制。 1. **类型擦除**: - 在编译期间,所有的泛型类型信息都会被替换为它们的实际类型...
Java泛型是Java SE 5.0引入的一个重要特性,它极大地增强了代码的类型安全性和可读性。泛型在编程中的应用广泛,特别是在集合框架中,使得我们可以在编译时就检查类型,避免了不必要的类型转换,并且提高了代码的...
### Java泛型编程指南知识点详解 #### 一、绪论:理解Java泛型的重要性与背景 **1.1 泛型的基本概念** 泛型是一种在编程语言中支持编写类型安全的通用函数或类的能力。在Java中引入泛型的主要目的是为了提供更...
泛型是一种抽象概念,它允许你在定义类、接口或方法时使用类型参数。这些类型参数在编译时会被具体的实际类型替换。如果你定义了一个类`MyClass<T>`,这里的`T`就是一个类型参数。当你创建`MyClass`的一个实例时,你...
4. **基本类型参数**: Java泛型不能直接接受基本类型(如int、char),但可以通过创建对应的包装类(如Integer、Character)来使用。 5. **协变与逆变**: 在泛型中,类型参数的使用会影响类型安全。比如,List是...
8. **类型推断**:Java 5及后续版本提供了类型推断,编译器可以根据上下文自动推断类型参数,简化代码。例如,`List<String> list = new ArrayList();` 9. **泛型和枚举**:泛型也可应用于枚举类型,为每个枚举常量...
另一方面,Java的泛型类型擦除带来了一定的灵活性,使得旧的无泛型代码能够与新的泛型代码兼容,这对于维护大型遗留项目尤其有利。然而,这也意味着Java开发者需要额外注意类型转换的安全性,避免出现...
Java中的泛型是Java SE 5.0引入的一项重要特性,极大地增强了代码的类型安全性和重用...通过详细阅读和理解这些代码,开发者可以更好地掌握Java泛型方法的概念,并将其应用到自己的项目中,提高代码的灵活性和安全性。
泛型类是一种带有类型参数的类,这些类型参数在创建类的实例时由具体的类型来替代。例如,下面是一个简单的泛型类`Box`的例子: ```java public class Box<T> { private T content; public void setContent(T ...
通配符是泛型类型参数的占位符,用于表示可变的类型参数。例如,`List<? extends Number>` 表示一个可以存储 Number 或其子类的列表。通配符可以分为bounded wildcards 和 unbounded wildcards 两种。 5. 泛型方法 ...
泛型的基本语法是在尖括号中指定类型参数,如`List<T>`,其中`T`代表一个类型参数,我们可以用实际的类型替换它,如`List<String>`、`List<Integer>`等。 多态性和泛型结合的典型应用场景是集合框架。例如,当我们...
泛型的类型参数可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。 ### 泛型类 泛型类是指在定义类的时候引入类型参数。例如,标准库中的`ArrayList`就是一个泛型类,可以声明为`ArrayList<T>...
泛型是Java SE 5.0引入的新特性,它允许在定义类、接口和方法时使用类型参数,从而提高代码的类型安全性和可读性。泛型的主要优点是可以避免强制类型转换,并在编译时检查类型安全。例如,你可以定义一个泛型类`...
泛型允许我们在类、接口和方法中使用类型参数,这样我们可以在编译时检查类型,避免了运行时类型转换的麻烦和潜在的ClassCastException风险。 在Java中,泛型的主要目的是为了实现参数化类型,这意味着我们可以创建...