日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 反射泛型方法_java基础之反射和泛型以及注解

發布時間:2025/3/11 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 反射泛型方法_java基础之反射和泛型以及注解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java基礎之反射和泛型以及注解

泛型擦除

泛型擦除: 泛型只在編譯時期有效,編譯后的字節碼文件中不存在泛型信息。

聲明泛型集合,集合兩端類型必須一致。類型也可以用包裝類型,泛型的類型必須是引用類型,不能為基本類型。

實現公用的類和方法,對公用的業務進行抽取。

泛型方法/泛型類/泛型接口

public class GenericTest

{

/**

* 泛型聲明,定義泛型方法

* @param

* @param

* @param t

* @param k

*/

public K save(T t, K k)

{

return null;

}

@Test

public void testMethod() throws Exception

{

//使用泛型方法: 在使用泛型方法的時候,確定泛型的類型

save("hello", 1);

}

}

泛型類:

public class GenericTest

@Test

public void testMethod() throws Exception

{

//使用泛型方法: 在使用泛型方法的時候,確定泛型的類型

//save("hello", 1);

//泛型類如何使用:在創建泛型類的時候確定

GenericTest demo = new GenericTest();

demo.save("hello", 1);

}

泛型中的extends 和super的意義:

Extends:定義List Extends String>;傳入的參數?必須是String類型的子類,否則會報錯;

Super:定義List Super String>;傳入的參數必須是String類型的父類,否則會報錯;

Type : 接口,任何類型默認的接口!

反射

反射可以在運行時期動態創建對象,獲取對象的屬性,方法

/**

* @ClassName: App

* @Description: 反射技術

* @author lqw

* @date 2016-5-13 下午01:33:55

*

*/

public class App

{

@Test

public void testInfo() throws Exception

{

//類全名

String sql = "com.hbmy.reflect.demo2.Admin";

//得到類的字節碼

Class> clazz = Class.forName(sql);

/**

* 創建對象1: 通過默認構造函數創建(簡寫)

*/

Admin admin = (Admin) clazz.newInstance();

/**

* 創建對象2: 通過無參構造器創建對象

*/

Constructor> constructors = clazz.getDeclaredConstructor();

constructors.newInstance();

/**

* 創建對象3:通過有參構造器創建對象

*/

Constructor> constructor = clazz.getDeclaredConstructor(String.class);

Admin admin2 = (Admin) constructor.newInstance("zhangsan");

// System.out.println(admin);

}

/**

* 獲取屬性名稱、值

* getDeclaredFields: 獲取所有的包含私有的屬性名稱

* getFields:只能訪問public的屬性

*/

@Test

public void testNameAndValue() throws Exception

{

//類全名

String sql = "com.hbmy.reflect.demo2.Admin";

//得到類的字節碼

Class> clazz = Class.forName(sql);

Admin admin = (Admin) clazz.newInstance();

// Method[] methods = clazz.getMethods();

// for (Method method : methods)

// {

// //設置強制訪問

// method.setAccessible(true);

// //名稱

// String name = method.getName();

// System.out.println(name);

//

// }

// Field[] fields = clazz.getFields();//打印出來的結果只有money

Field[] fields = clazz.getDeclaredFields();

for (Field field : fields)

{

//設置強制訪問

field.setAccessible(true);

//名稱

String name = field.getName();

Object value = field.get(admin);

System.out.println(name + value);

}

}

/**

* 反射獲取方法

*/

@Test

public void testGetMethods() throws Exception

{

//類全名

String sql = "com.hbmy.reflect.demo2.Admin";

//得到類的字節碼

Class> clazz = Class.forName(sql);

Admin admin = (Admin) clazz.newInstance();

/*

* 獲取方法對象

*/

Method declaredMethod = clazz.getDeclaredMethod("getId");

/**

* 調用方法

*/

Object return_value = declaredMethod.invoke(admin);

System.out.println(return_value);

Method[] methods = clazz.getDeclaredMethods();

for (Method method : methods)

{

method.setAccessible(true);

String name = method.getName();

System.out.println(name);

}

}

注解

注解的作用

1、 告訴編譯器如何去運行

2、 簡化(取代)配置文件

public class App

{

@Override

public String toString()

{

return super.toString();

}

@SuppressWarnings({"unused","unchecked"})

public void save()

{

List list = null;

}

@Deprecated

public void save1()

{

}

}

自定義注解: 通過自定義注解可以給類,字段,方法加上描述信息。

public @interface Author

{

/**

* 注解屬性

* 1.修飾符為默認或者public

* 2.不能有主體

* 3. 如果注解名稱為value,使用的時候可以省略名稱,直接給值

*/

String name() default "lqw";

//帶默認值得注解

int age() default 23;

String remark();

}

元注解

元注解就是注解的注解

指定注解的可用范圍

@Target({

TYPE,

FIELD,

METHOD,

PARAMETER,

CONSTRUCTOR,

LOCAL_VARIABLE})

注解的生命周期

/**

* 元注解2: 指定注解的生命周期

* RetentionPolicy.SOURCE 只在源碼級別有效

* RetentionPolicy.CLASS 只在類的字節碼級別有效 默認值

* RetentionPolicy.RUNTIME 只在運行時期有效

*/

@Retention(RetentionPolicy.SOURCE)

最后總結一句:注解和反射其實不難,只要不畏懼,注解其實看看源碼也就那么回事。至于反射嘛。可以這么說,無反射,則無框架,幾乎所有的框架都是通過反射實現的。說白了,反射也就是通過加載類的字節碼去獲取類里面的方法和屬性,其實框架也是這么實現的。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

總結

以上是生活随笔為你收集整理的java 反射泛型方法_java基础之反射和泛型以及注解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。