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

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

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

瀏覽:190日期: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久久,三上悠亚国产精品一区二区三区
久久精品国产99国产| 日韩欧美精品综合| 性欧美长视频| 国内精品福利| 日韩一区二区免费看| 欧美精品自拍| 亚洲综合精品| 日本色综合中文字幕| 国产精品videossex| 免费精品一区| 国产色播av在线| 午夜影院欧美| 视频一区日韩精品| 欧美交a欧美精品喷水| 欧美日韩a区| 久久精品理论片| 91精品精品| 蜜臀91精品国产高清在线观看| 伊人久久婷婷| 久久国产生活片100| 日韩av专区| 午夜欧美视频| 亚洲性视频在线| 国产精品极品国产中出| 亚洲性色av| 免费一级片91| 久久精品国产一区二区| 久久精品av| 亚洲精品成人一区| 国产精品任我爽爆在线播放| 日韩国产激情| 中文无码久久精品| 精品网站aaa| 国产色综合网| 老司机精品视频在线播放| 久久精品卡一| 日韩激情综合| 日本在线高清| 亚洲精品国产精品粉嫩| 久久三级毛片| 玖玖玖国产精品| 美腿丝袜亚洲一区| 中文日韩欧美| 麻豆国产91在线播放| 天堂日韩电影| 亚洲v天堂v手机在线| av在线最新| 日韩毛片一区| 欧美黄色网页| 日韩和欧美一区二区三区| 天堂中文在线播放| 日日摸夜夜添夜夜添国产精品| 日本久久综合| 亚洲精品极品| 99久久99久久精品国产片果冰| 日韩高清在线不卡| 99tv成人| 久久女人天堂| 亚洲资源在线| 日韩国产欧美| 国产日韩视频| 久久最新视频| 老牛影视精品| 欧美日韩一区二区三区四区在线观看 | 国产精品宾馆| 日韩一区二区久久| 国产videos久久| 偷拍亚洲精品| 欧美国产91| 首页国产精品| 国产探花一区| 美女精品在线| 91精品国产成人观看| 美女视频黄免费的久久| 日韩在线a电影| 国产91精品对白在线播放| 麻豆91小视频| 日韩国产一区二| 影音国产精品| 久久久一本精品| 美女精品一区二区| 69堂精品视频在线播放| 免费欧美日韩| 亚洲天堂久久| 日韩理论视频| 韩国一区二区三区视频| 日本一区二区三区视频在线看| 亚洲成人精选| 日韩国产专区| 国产精品99视频| 国产精品久久久久久妇女| 亚洲狼人精品一区二区三区| 狠狠干综合网| 色婷婷精品视频| 成人亚洲一区二区| 久久亚洲黄色| 美腿丝袜在线亚洲一区| 欧美三级第一页| 综合一区二区三区| 亚洲欧美日本日韩| 伊人久久亚洲影院| 欧美 日韩 国产一区二区在线视频 | 国产在线观看www| 精品午夜久久| 久久精品九色| 国产精品分类| 国产福利资源一区| 国产精品99精品一区二区三区∴ | 日韩和欧美一区二区| 天堂成人国产精品一区| 妖精视频成人观看www| 亚洲精品一区二区在线看| 久久精品亚洲人成影院| www在线观看黄色| 国产在线一区不卡| 福利一区二区免费视频| 精品亚洲成人| 97在线精品| 日韩欧美一区二区三区免费看| caoporn视频在线| sm久久捆绑调教精品一区| zzzwww在线看片免费| 日韩啪啪电影网| 久久国产欧美| 婷婷六月综合| 久久国产99| 日韩精品视频在线看| 人人精品久久| 久久不见久久见中文字幕免费| 久久国产精品色av免费看| 久久国产生活片100| 国产精品宾馆| 水蜜桃久久夜色精品一区| 日韩欧美午夜| 亚洲国产不卡| 亚洲精品一区二区在线播放∴| 日韩超碰人人爽人人做人人添| 青草av.久久免费一区| 国产精品一区免费在线| 免费一级欧美片在线观看网站| 精品国产三区在线| 欧美日韩精品免费观看视完整| 999精品在线| 石原莉奈在线亚洲二区| 四虎在线精品| 精品国产欧美| 亚洲福利一区| 亚洲综合婷婷| 国产劲爆久久| 色老板在线视频一区二区| 亚洲一区二区成人| 日韩精品亚洲一区二区三区免费| 国产精品久久| 久久精品国产99久久| 免费在线观看成人| 国产精品欧美日韩一区| 成人三级高清视频在线看| 久久在线电影| 婷婷综合国产| 国产精品高潮呻吟久久久久| 亚洲国产成人二区| 一区在线视频观看| 日本久久一区| 国产传媒av在线| 亚洲欧美网站| 久久99偷拍| 夜夜嗨av一区二区三区网站四季av| 日韩视频一二区| 久久电影tv| 亚洲免费成人av在线| 成人精品视频| 伊人www22综合色| 精品久久中文| 在线视频免费在线观看一区二区| 蜜桃视频在线观看一区| 精品香蕉视频| 视频在线在亚洲| 国产一区二区三区四区| 亚洲一区欧美二区| 国产在线观看91一区二区三区| 国产视频亚洲| 精品久久久亚洲| 免费成人性网站| 高清久久精品| 亚洲精品观看| 久久婷婷久久| 国产伦理一区| 天堂成人免费av电影一区| 国产一区不卡| 亚洲字幕久久| 久久久久国产精品一区二区| 日韩欧美精品一区二区综合视频| 都市激情国产精品| 日本在线不卡视频一二三区| 九九色在线视频| 国产精品一区二区av日韩在线| 日韩午夜高潮| 日韩精品电影| 欧美成人一二区| 日韩一区网站|