写dao的时候可以如下方式:
package com.sourcefour.test.dao;
import java.lang.reflect.ParameterizedType;
class Person {
// public Person() {
// super();
// }
public void function() {
System.out.println("function in Person.class...");
}
}
class SubClass extends SuperClass<Person> {
// public SubClass() {
// super();
// }
}
public class SuperClass<T> {
private Class<T> clazz;
@SuppressWarnings("unchecked")
public SuperClass() {
if (ParameterizedType.class.isAssignableFrom(this.getClass().getGenericSuperclass().getClass())){
clazz = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
}
public Class<T> getClazz() {
return clazz;
}
public void setClazz(Class<T> clazz) {
this.clazz = clazz;
}
/**
* 普通的非泛型类Class
* 泛型化的类Class<T>
* JDK中,普通的Class.newInstance()方法的定义返回Object,要将该返回类型强制转换为另一种类型;
* 但是使用泛型的Class<T>,Class.newInstance()方法具有一个特定的返回类型;
* @param args
*/
public static void main(String[] args) {
SuperClass<Person> subClass = new SubClass();
// 1.得到泛型类T实际的完整类名
System.out.println(subClass.getClazz());
//2.得到泛型类T的对象
try {
System.out.println(subClass.getClazz().newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
//3.调用泛型类T的方法
try {
subClass.getClazz().newInstance().function();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
输出结果如下:class myGenetic.Person
myGenetic.Person@10d448
function in Person.class...
package com.sourcefour.test.dao;
但是一般这样写就悲剧了...
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
class ACE extends TestJave<String>{
}
public class TestJave<T> {
private Class<T> entityClass;
/**
* 通过反射获取子类确定的泛型类
*/
public TestJave() {
Type[] params =((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments();
}
public static void main(String[] args) {
// TestJave<?> te = new ACE();
TestJave<String> te = new TestJave<String>(); //运行错误!!
}
}
Exception in thread "main" java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
at com.sourcefour.test.dao.TestJave.<init>(TestJave.java:16)
at com.sourcefour.test.dao.TestJave.main(TestJave.java:21)
其中原理,暂时没有相同,还请大家知道了,点拨下...
分享到:
相关推荐
标题和描述均聚焦于“基于Java的泛型编程”,这一主题深入探讨了Java语言中泛型编程的概念、优点以及其实现机制。...理解并熟练掌握泛型编程,对于任何希望在Java开发中取得卓越成就的程序员来说,都是至关重要的技能。
在Java集合框架中广泛使用了泛型,如List、Map,V>等,其中的E、K、V代表元素类型。 反射是Java语言的一个特性,它允许程序在运行时获得任何类的内部信息,并且能够操作类或对象的内部属性和方法。通过反射,可以...
泛型类型的继承关系是泛型机制中的一個重要概念。下面是一个示例代码,演示了泛型类型的继承关系: ```java import java.util.List; import java.util.ArrayList; import java.util.Collection; public class ...
在 Java 中,对 List 排序可以使用 Collections.sort(list) 方法,但是这种方法只能对基本类型的 List 进行排序,如果 List 中包含的是对象,那么这种方法就不行了。这时需要使用Comparator接口来实现排序。 ...
以上只是恒生电子笔试题中可能出现的一些Java知识点,全面复习并深入理解这些内容,将有助于你在笔试中取得优异的成绩。同时,不断练习编程、分析问题和解决问题的能力,也是提升自身技术水平的关键。祝你好运!
题目:设计一个带表头的双向链表(链表中数据的具体类型可以随意) 提供以下方法: (1)insert:在某个位置插入对象; (2)insert:在链表的最后插入对象; (3)delete:在某个位置删除对象; (4)delete:删除...
此外,泛型和迭代器也是集合框架中不可或缺的部分。 在多线程方面,Java提供了丰富的API来支持并发编程,如Thread类、Runnable接口、synchronized关键字、volatile变量、wait/notify机制、并发工具类如Semaphore、...
泛型提供类型安全,避免强制类型转换;枚举可以创建固定数量的常量;注解则是一种元数据,可以用来提供编译时或运行时的额外信息。 总的来说,"SE_JAVA_EXP_E046.zip"中的答案涵盖了广泛的Java编程知识点,对提升...
"chapter05泛型、枚举与For语句的简化写法.ppt"介绍了Java中的泛型、枚举类型和增强的for循环,这些都是提高代码可读性和复用性的高级特性。 "2009-2010(1)chapter11多线程程序设计.ppt"涵盖了Java的并发编程,多...
通过以上知识点的学习和练习,将有助于你在Java笔试和面试中取得优异的表现。提供的文档和网页资料,如"java面试题.doc"、"JAVA面试题最全集.htm"、"中远面试题.txt"、"ibm笔试题"等,应包含大量具体的题目和解析,...
13. **泛型**:泛型提供类型安全,防止在集合中插入不兼容的类型。 14. **IO流**:Java的输入/输出流系统支持读写文件、网络通信等,分为字节流和字符流。 15. **多线程**:Java内置对多线程的支持,理解线程同步...
这些知识点涵盖了Java语言的各个方面,对于准备南京理工大学计算机学院的Java试卷,考生需要全面复习并深入理解这些内容,才能在考试中取得好成绩。同时,通过实践编写代码和解决实际问题,能更好地巩固和提升Java...
9. **泛型**:Java的泛型为容器提供了类型安全,考生应能熟练使用泛型类和接口。 10. **Java SE和Java EE的区别**:了解Java标准版(SE)和企业版(EE)的应用场景和主要组件。 11. **API的使用**:如Math类、Date...
7. **泛型**:理解泛型的基本概念,如何在类、接口和方法中使用泛型,以及类型擦除。 8. **输入/输出流**:学习I/O流的层次结构,掌握FileInputStream、FileOutputStream、BufferedReader、PrintWriter等类的用法。...
总的来说,这款Java上机模拟软件为备考者提供了一个全面测试和提升Java编程能力的平台,通过反复练习和模拟真实的考试环境,有助于考生在实际考试中取得更好的成绩。在准备过程中,考生应充分利用这类资源,系统地...
"Java 泛型"是Java中一个重要的特性,它允许在定义类、接口和集合时指定类型参数,提高了代码的复用性和安全性。理解并熟练运用泛型,对于编写高效、无错的Java代码至关重要,也是面试中常被问到的话题。 为了在...
Java是一种广泛使用的高级编程...每个文档可能分别对应不同的主题,考生需要全面理解和掌握Java语言的不同方面,才能在考试中取得好成绩。通过复习这些知识点,不仅可以应对考试,也能为日后的Java开发打下坚实的基础。
Java自学PPT涵盖了一系列核心Java概念,旨在帮助初学者或有经验的开发者深入理解这门广泛使用的编程语言。以下是对每个文件内容的详细解释: 1. **Java面向对象程序设计第02章_基本...祝你在Java自学旅程中取得成功!