﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-问心</title><link>http://www.blogjava.net/xingsky/</link><description>你若不离不弃 我必生死相依</description><language>zh-cn</language><lastBuildDate>Tue, 05 May 2026 12:28:19 GMT</lastBuildDate><pubDate>Tue, 05 May 2026 12:28:19 GMT</pubDate><ttl>60</ttl><item><title>使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型</title><link>http://www.blogjava.net/xingsky/archive/2012/09/14/387732.html</link><dc:creator>xing_sky</dc:creator><author>xing_sky</author><pubDate>Fri, 14 Sep 2012 08:21:00 GMT</pubDate><guid>http://www.blogjava.net/xingsky/archive/2012/09/14/387732.html</guid><wfw:comment>http://www.blogjava.net/xingsky/comments/387732.html</wfw:comment><comments>http://www.blogjava.net/xingsky/archive/2012/09/14/387732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xingsky/comments/commentRss/387732.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xingsky/services/trackbacks/387732.html</trackback:ping><description><![CDATA[<h2 class="titName SG_txta" id="t_86e34ca8010132ly">
<div><strong><font style="font-size: 16px">一、getGenericSuperclass()和getActualTypeArguments()基本用法：</font></strong></div>
<div><br /></div>
<div>import java.lang.reflect.ParameterizedType;</div>
<div>public class TT extends TT2&lt;Integer&gt; {</div>
<div><br /></div>
<div>public static void main(String[] args) {</div>
<div><br /></div>
<div>System.out.println(((ParameterizedType) new TT().getClass()</div>
<div>.getGenericSuperclass()).getActualTypeArguments()[0]);</div>
<div><br /></div>
<div>}</div>
<div><br /></div>
<div>}</div>
<div><font style="font-size: 16px">//output：class java.lang.Integer</font></div>
<div>说明： <span style="line-height: 21px">getGenericSuperclass()</span>&nbsp;<wbr>通过反射获取当前类表示的实体（类，接口，基本类型或void）的直接父类的Type，<span style="line-height: 21px">getActualTypeArguments()返回参数数组。</span></div>
<div><span style="line-height: 21px"><br /></span></div>
<div><span style="line-height: 21px"><strong><font style="font-size: 16px">二、泛型</font></strong></span> <span style="font-size: 16px; line-height: 24px">DAO</span>&nbsp;<wbr><span style="line-height: 21px"><strong><font style="font-size: 16px">模拟</font></strong></span></div>
<div><font style="font-size: 14px; line-height: 24px"><strong>BaseDaoImpl类：</strong></font></div>
<div>
<div style="font-size: 14px; line-height: 24px"><font size="+0">package com.mrlun.oa.test;</font></div>
<div style="font-size: 14px; line-height: 24px"><span style="line-height: 24px">import java.lang.reflect.ParameterizedType;</span></div>
<div style="font-size: 14px; line-height: 24px"><span style="line-height: 24px">@SuppressWarnings("unchecked")</span></div>
<div style="font-size: 14px; line-height: 24px">public class BaseDaoImpl&lt;T&gt; {</div>
<div style="font-size: 14px; line-height: 24px">private Class clazz;</div>
<div style="font-size: 14px; line-height: 24px"><br /></div>
<div style="font-size: 14px; line-height: 24px">public BaseDaoImpl() {</div>
<div style="font-size: 14px; line-height: 24px">ParameterizedType pt = (ParameterizedType) this.getClass()</div>
<div style="font-size: 14px; line-height: 24px">.getGenericSuperclass();</div>
<div style="font-size: 14px; line-height: 24px">this.clazz = (Class) pt.getActualTypeArguments()[0];</div>
<div style="font-size: 14px; line-height: 24px">System.out.println("Type为： " + clazz.getSimpleName());</div>
<div style="font-size: 14px; line-height: 24px">}</div>
<div style="font-size: 14px; line-height: 24px"><span style="line-height: 24px">public void save() {</span></div>
<div style="font-size: 14px; line-height: 24px">System.out.println("Type为： " + clazz.getSimpleName());</div>
<div style="font-size: 14px; line-height: 24px">}</div>
<div style="font-size: 14px; line-height: 24px"><br /></div>
<div style="font-size: 14px; line-height: 24px">}</div>
<div style="font-size: 14px; line-height: 24px"><strong>UserDao类：</strong></div>
<div>
<div>package com.mrlun.oa.test;</div>
<div><br /></div>
<div>public class UserDao extends BaseDaoImpl&lt;Users&gt;{</div>
<div><br /></div>
<div>}</div></div></div>
<div><font style="font-size: 14px"><span style="line-height: 24px"><strong>测试类：</strong></span></font></div>
<div>
<div>
<div>package com.mrlun.oa.test;</div>
<div><br /></div>
<div>public class Test{</div>
<div>public static void main(String[] args) {</div>
<div>UserDao userdao=new UserDao();</div>
<div>userdao.save();</div>
<div>}</div>
<div>}</div></div>
<div><font style="font-size: 16px"><span style="line-height: 24px">//output：</span></font></div>
<div><font style="font-size: 16px"><span style="line-height: 24px">Type为： Users（new 子类时会调用父类的默认的构造方法）</span></font></div>
<div><font style="font-size: 16px"><span style="line-height: 24px">Type为： Users</span></font></div></div>
<div><font style="font-size: 16px"><span style="line-height: 24px">这时，我们就可以使用泛型来简化DAO的操作，省去了写N多有重复的方法的DAO的时间。</span></font></div><br /></h2><img src ="http://www.blogjava.net/xingsky/aggbug/387732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xingsky/" target="_blank">xing_sky</a> 2012-09-14 16:21 <a href="http://www.blogjava.net/xingsky/archive/2012/09/14/387732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>