日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java - 關于泛型和反射的代碼錯誤(cannot select from a type variable)

瀏覽:187日期:2024-01-21 10:23:28

問題描述

問題1:想寫個requestInfo的toString方法,把所有的成員變量都打印出來,子類就不用每次都寫個toString方法了,但是父類怎么獲取子類成員變量的值?

public class RequestInfo{ public String toString() {StringBuilder sb = new StringBuilder();Field[] fields = this.getClass().getDeclaredFields();for(Field field : fields){ sb.append(field.getName(), ' = ', (這里怎么獲取屬性值?), ';');}return ''; }}

問題2下面那個類P怎么實例化,也沒懂錯誤的原因,用P.getClass()還是不行

public abstract class AbstractService<Q extends RequestInfo, P extends ResponseInfo>{ public static final Logger LOGGER = LoggerFactory.getLogger(AbstractService.class); private String logTag; private P respBean; public P execute(Q reqBean) {init();LOGGER.info(StringUtil.appendStr('Request : {}, req = {}', logTag, reqBean.toString()));try{ if (checkInput(reqBean)) {handle(reqBean, respBean); } else {throw new Exception(StringUtil.appendStr(logTag, ' check input param invalid')); }}catch (Exception e){ LOGGER.error(StringUtil.appendStr(logTag, ' Exception: '), e);}return respBean; } protected void init() {logTag = getClass().getSimpleName();respBean =P.class.newInsance();//這里報錯,cannot select from a type variable } protected boolean checkInput(Q reqBean) {return true; } protected abstract void handle(Q reqBean, P respBean) throws Exception;}

問題解答

回答1:

泛型,在編譯之后,就已經被擦除了,jvm根本看不到泛型的信息,這點是由于歷史遺留原因導致的,所以你說的p.getClass是不可能存在的

第一個問題,想法很好,但是,據我所知是無法實現的,對象是無法獲知子類的情況的,java的多態機制也只能是從父類或者父接口中查詢方法

我猜第一個問題你會覺得可以獲取子類的成員變量是覺得繼承之后子類的toString方法一執行,也會調用自己的this,這是錯誤的。在運行的時候,jvm會從父類的對象空間獲取這個方法并執行。所以,怎么搞都只是父類的成員變量

上述斜體的地方我說錯了,開了IDE測試了一下之后,對于自己之前理解的地方有誤,希望沒造成題主的困擾。下面貼的這段代碼,就可以循環獲取從子類到父類的所有變量。希望能有幫助

public String toString() {StringBuilder sb = new StringBuilder();Class clazz = this.getClass();while(clazz.getSuperclass() != null){ Field[] fields = clazz.getDeclaredFields(); try {for (Field field : fields) { field.setAccessible(true); sb.append(field.getName()).append('=').append(field.get(this)).append('n');} } catch (Exception e) {e.printStackTrace(); } clazz = clazz.getSuperclass();}return sb.toString(); }回答2:反射工具類

package cn.hylexus.app.util;import java.lang.reflect.Field;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class ReflectionUtils { public static List<Field> getFields(Class<?> clz) {List<Field> ret = new ArrayList<>();for (Class<?> c = clz; c != Object.class; c = c.getSuperclass()) { Field[] fields = c.getDeclaredFields(); ret.addAll(Arrays.asList(fields));}return ret; } /** * @param cls * 子類對應的Class * @param index * 子類繼承父類時傳入的索引,從0開始 * @return */ public static Class<?> getSuperClassGenericType(Class<?> cls, int index) {if (index < 0) return null;Type type = cls.getGenericSuperclass();if (!(type instanceof ParameterizedType)) return null;ParameterizedType parameterizedType = (ParameterizedType) type;Type[] typeArguments = parameterizedType.getActualTypeArguments();if (typeArguments == null || typeArguments.length == 0 || index > typeArguments.length - 1) return null;Type t = typeArguments[index];if (!(t instanceof Class)) { return null;}return (Class<?>) t; } public static Class<?> getSuperClassGenericType(Class<?> cls) {return getSuperClassGenericType(cls, 0); }}問題1

public class RequestInfo { @Override public String toString() {StringBuilder sb = new StringBuilder();//可以拿到多層次基礎的屬性List<Field> fields = ReflectionUtils.getFields(this.getClass());for (Field f : fields) { f.setAccessible(true); try {sb.append(f.getName()).append('=').append(f.get(this)).append('n'); } catch (Exception e) {e.printStackTrace(); }}return sb.toString(); }}問題2

@SuppressWarnings('unchecked') protected void init() {logTag = getClass().getSimpleName();try { //這里可以拿到動態綁定的Class信息 Class<?> clz = ReflectionUtils.getSuperClassGenericType(this.getClass(), 1); respBean = (P) clz.newInstance();} catch (Exception e) { e.printStackTrace();} }回答3:

第一個問題可以利用commons-beanutils做。

標簽: java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
三级亚洲高清视频| 亚洲一区二区三区免费在线观看| 青草久久视频| 日韩av影院| 日韩欧美四区| 亚洲一区二区免费看| av不卡在线看| 99热精品久久| 蜜桃成人av| 亚洲在线成人| 国产亚洲高清在线观看| 成人在线免费观看91| 久久国产精品美女| 久久91视频| 成人免费电影网址| 久久大逼视频| 国产精品久久观看| 亚洲免费影视| 国产精品一区二区三区av麻| 成人在线视频免费看| 久久精品卡一| 日本亚洲欧洲无免费码在线| 欧美一区精品| 国产精品qvod| 日韩欧美另类一区二区| 麻豆视频久久| 亚洲福利专区| 日韩午夜黄色| 久久久久久久久成人| 国产高清不卡| 日韩精品高清不卡| 香蕉精品视频在线观看| 欧美国产亚洲精品| 黄色亚洲免费| 麻豆一区二区99久久久久| 亚洲在线网站| 999久久久免费精品国产| 国产精品久久777777毛茸茸| 亚洲一级特黄| 国内一区二区三区| 国产日韩欧美一区二区三区 | 亚洲综合精品| 激情中国色综合| 欧美va天堂在线| 色综合视频一区二区三区日韩 | 精品中文字幕一区二区三区四区| 久久中文字幕一区二区三区| 日韩1区2区3区| 欧美日韩在线二区| 欧美国产偷国产精品三区| 国产精品手机在线播放| 日本午夜精品久久久久| 亚洲精品乱码| 亚洲午夜久久| 亚洲一区有码| 亚洲资源网站| 亚洲欧美日本国产| 日韩中文字幕| 久久精品97| 精品欠久久久中文字幕加勒比| 国产高清日韩| 老色鬼精品视频在线观看播放| 婷婷精品在线| 日韩不卡免费视频| 国产精品夜夜夜| 麻豆精品av| 欧美13videosex性极品| 午夜久久免费观看| 中文字幕日韩高清在线| 日韩av一二三| 精品一区二区三区四区五区| 日韩精品1区| 日韩精品一卡二卡三卡四卡无卡| 一区二区三区四区日韩| 国产亚洲精aa在线看| 丁香六月综合| 亚洲五月综合| 亚洲精品**中文毛片| 激情欧美国产欧美| 日韩精品一区第一页| 国产精品99久久免费观看| 九色porny丨国产首页在线| 九九综合九九| 久久激情五月激情| 久久精品国内一区二区三区水蜜桃| 国产亚洲网站| 久久av免费看| 蜜桃av一区| 日韩福利一区| 日本成人中文字幕在线视频| 精品入口麻豆88视频| 久久亚洲国产精品一区二区| 久久久久九九精品影院| 麻豆精品网站| 亚洲伊人av| 国产麻豆精品| 视频一区视频二区在线观看| 视频在线不卡免费观看| 亚洲精品大片| 99视频在线精品国自产拍免费观看| 国产极品久久久久久久久波多结野| 免费看的黄色欧美网站| 国产一区欧美| 色综合五月天| 久久精品一区| 少妇精品久久久一区二区| 欧美亚洲激情| av资源亚洲| 国产精品巨作av| 亚洲精品少妇| 老司机精品久久| 91精品电影| 亚洲一级少妇| 精品三级av| 国产精区一区二区| 人人精品久久| 欧美日韩亚洲国产精品| 亚洲一区av| 日本中文字幕一区二区视频| 中文字幕av亚洲精品一部二部| 国产精品日本| 免费在线观看视频一区| 另类国产ts人妖高潮视频| 免费黄色成人| 亚洲精品123区| 国产视频一区在线观看一区免费| 日韩精品免费一区二区三区| 欧美国产免费| 丁香婷婷久久| 久久香蕉国产| 日韩专区一卡二卡| 视频精品一区| 国产精品久久乐| 国产一区2区在线观看| 日韩精品电影| 久久午夜影视| 日韩不卡在线观看日韩不卡视频| 国产一卡不卡| 免费看一区二区三区| av免费不卡国产观看| 不卡在线一区二区| 日本在线一区二区三区| 精品久久久久中文字幕小说| 精精国产xxxx视频在线播放| 最新亚洲一区| 国产精品亚洲四区在线观看 | 国产真实久久| 日韩激情精品| 日韩中文字幕高清在线观看| 亚洲综合日韩| 日本欧美一区二区在线观看| yellow在线观看网址| 欧美专区18| 精品久久不卡| 蜜乳av另类精品一区二区| 麻豆一区在线| 天堂成人免费av电影一区| 国产精品magnet| 免费一区二区视频| 中文字幕在线高清| 日韩国产高清在线| 日韩中文在线电影| 伊人精品久久| 精品一二三区| 国产亚洲综合精品| 国产精品一线| 9色国产精品| 欧美日韩精品免费观看视完整| 亚洲精品人人| 黄色欧美日韩| 蜜臀久久99精品久久一区二区| 精品国产亚洲一区二区三区在线 | 综合激情网...| 精品国产午夜| 欧美日韩一区二区三区四区在线观看 | 日韩中文字幕1| 欧美在线亚洲综合一区| 国内在线观看一区二区三区| 欧美一级久久| 日本电影久久久| 日韩中文字幕区一区有砖一区 | 老牛影视一区二区三区| 欧美日韩国产免费观看视频| 天堂av在线| 91青青国产在线观看精品| 国产精品视频一区视频二区| 欧美日本精品| 国产亚洲高清在线观看| 日韩高清在线观看一区二区| 老司机久久99久久精品播放免费| 91九色精品| 亚洲免费播放| 亚洲精品大全| 日韩一区中文| 91嫩草精品| 欧美视频久久| 美女精品视频在线| 精品三级av| 亚洲高清二区| 亚洲欧洲午夜|