Java 反射呼叫方法的引數是陣列的寫法
package com.heatdeath.fight.sort;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Random;
/**
* Author: heatdeath
* Date: 2018/8/19
* Desc:
*/
public class SortUtil {
public static void swap(Integer[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static <T> void testSortMethod(Class<T> clazz) throws Exception {
Random random = new Random();
Integer[] arr = new Integer[20];
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(100);
}
System.out.println(Arrays.toString(arr));
Method sortMethod = clazz.getMethod("sort" , Integer[].class);
sortMethod.invoke(clazz.newInstance(), (Object) arr);
System.out.println(Arrays.toString(arr));
boolean flag = true;
for (int i = 1; i < arr.length; i++) {
if (!flag) {
break;
}
if (arr[i] < arr[i - 1 ]) {
flag = false;
}
}
System.out.println("arr is sorted : " + flag);
}
}
注意:
getMethod() 方法第二個引數直接寫 Integer[].class 就可以
但是在 method.invoke() 方法的第二個引數要 使用 (Object)arr 進行強制的型別轉換!
相關推薦
Java 反射呼叫方法的引數是陣列的寫法
package com.heatdeath.fight.sort; import java.lang.reflect.Method; import java.util.Arrays; import j
java工具類-接受請求引數,並利用反射呼叫方法
public String a(HttpServletRequest request,HttpServletResponse response) throws JSONException, IOException, ParseException, IllegalAccessException, Ille
java通過反射呼叫不同引數的方法
import java.lang.reflect.Method; public class testReflect { /** * @param args */ public sta
SpringMVC原始碼學習之request處理流程 springMVC原始碼學習地址 springMVC原始碼學習之addFlashAttribute原始碼分析 java reflect反射呼叫方法invoke
目的:為看原始碼提供呼叫地圖,最長呼叫邏輯深度為8層,反正我是springMVC原始碼學習地址看了兩週才理出來的。 1.處理流程(版本為4.3.18) 入口為spring-webmvc-4.3.18.RELEASE.jar中org.springframework.web.servlet.Dispatche
Java 反射呼叫類的屬性和方法(包含父類私有屬性和覆蓋重寫的方法等)
前面介紹了,反射呼叫類的構造方法來建立類的例項物件。一個類的結構包含方法(構造,靜態,非靜態)和屬性(靜態和非靜態)。按照迴圈漸進的方式,接下來,介紹反射類中屬性和普通的方法。 在這裡簡單介紹,反射呼叫屬性和方法會用到的新類,Method類和Field類。
根據物件中欄位屬性值,動態java反射呼叫相應的get方法
根據物件中欄位屬性值,動態呼叫相應的get方法 #### 舉個例子,把物件GoodsVO中的欄位作為key, get方法作為value,全部存放在Map中. //商品物件 public class GoodsVO { /** * 品牌ID */
java反射獲取方法以及呼叫方法
Java反射獲取方法以及呼叫方法 獲取方法 1.先找到方法所在類的位元組碼 2.找到需要被獲取的方法 Class類中獲取方法: public Method[] getMethods();//獲取包括自身和繼承(實現)過來的所有的public方法——Method不支援泛型&l
C#通過反射獲取類中的方法和引數個數,反射呼叫方法帶引數
using System; using System.Reflection; namespace ConsoleApp2 { class Program { static void Main(string[] args)
java 通過反射獲取方法引數列表名稱
說明 一般情況下是使用不到用反射來獲取引數列表名稱的,只要知道引數列表的型別就可以執行某一個引數了,因為引數名稱是給開發人員用的,執行時引數名稱不起作用。 所以 JDK 本身是沒有獲取引數列表名稱的。 如果要寫框架一類的東西,比
java反射呼叫Bean指定方法
步驟: 一:獲取到bean的物件,方式有兩種, 1.通過Spring上下文獲取到bean物件Object object = SpringContextUtils.getBean(tableName+"Service"); Class sel
利用反射呼叫方法時,處理ref,out引數需要注意的問題
專案中如下的泛型方法,因為要在執行時,動態指定型別引數,所以要利用反射來實現。 public static TR Deserialize<TR>(byte[] source, ref int offset) 一般做法如下: // 變數 type是該方法所在
Java泛型 通過反射獲得方法引數中的變數類名和泛型
通過反射獲得方法引數中的變數類名和泛型 package test; import java.lang.reflect.Method; import java.lang.reflect.Paramet
java反射呼叫指定jar包中的類和方法
需求:動態載入jar包,例項化jar包中的類,並呼叫類中的方法 已知:jar包所在路徑和jar包名稱,類名已知,類繼承的抽象類可以被引入,類中的方法已知 實現方法: 1. 手動呼叫類載入器動態載入jar包; 2. 應用java中的反射例項化類,得到類的一個例項; 3. 運
java中,方法引數是基本型別和引用型別的區別
方法引數是基本型別時,傳遞的是值。 方法引數是引用型別時,傳遞的是記憶體地址值 當引數是基本型別時,在呼叫方法時將值傳遞到方法中,執行方法,執行結束方法退出,對原本main中定義的變數沒有任何操作(方法中沒有return)。即:此時只跟棧有關係,方法執行完之後(方法中沒有return),會彈棧。
原 .NET/C# 反射的的效能資料,以及高效能開發建議(反射獲取 Attribute 和反射呼叫方法)
大家都說反射耗效能,但是到底有多耗效能,哪些反射方法更耗效能;這些問題卻沒有統一的描述。 本文將用資料說明反射各個方法和替代方法的效能差異,並提供一些反射程式碼的編寫建議。為了解決反射的效能問題,你可以遵循本文采用的各種方案。 本文內容 反射各方法的效能資料 反射的高效能開發建議
Java動態呼叫複雜引數的WebService【精選彙總篇一】
Java如何動態的呼叫WebService? 一定時動態、動態、動態...不是動態就不是想要的解決方案。(本篇正在更新中..可以關注後,持續探討)
JAVA基礎-5.方法,陣列
1:方法(掌握) (1)方法:就是完成特定功能的程式碼塊。 注意:在很多語言裡面有函式的定義,而在Java中,函式被稱為方法。 (2)格式: 修飾符 返回值型別 方法名(引數型別 引數名1,引數型別 引數名
java 反射呼叫Service導致Spring注入Dao失效
反射簡介 反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法; 對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;這種動態獲取的資訊以及 動態呼叫物件的方法的功能稱為java語言的反射機制。
OSGi bundle之間通過反射呼叫方法
兩個bundle之間不通過pom檔案引入jar包方式呼叫另一個方法,通過反射的方式呼叫。 前提:被呼叫的方法的bundle需要配置 <Export-Package> 要提供的被引用的包</Export-Package> 呼叫方需要配置 <I
Java反射之——方法的反射操作
Java反射中 ,方法的反射操作是通過Method物件呼叫invoke(物件,引數)方法,之前我們需要知道怎樣來確定一個方法? 注:通過方法名和引數列表我們可以唯一確定一個方法。 首先我們獲取方法就是獲取類中的資訊,獲取類的資訊需要得到類型別,因此我們通過已知A的例項物件a1,呼叫getCl