當前位置:首頁 » 編程語言 » java獲取參數

java獲取參數

發布時間: 2024-04-27 02:22:21

『壹』 java如何獲取方法參數的參數名稱

  • packagecom.mikan;

  • importjava.lang.annotation.*;

  • /**

  • *@authorMikan

  • *@date2015-08-0423:39

  • */

  • @Target(ElementType.PARAMETER)

  • @Retention(RetentionPolicy.RUNTIME)

  • @Documented

  • public@interfaceParam{

  • Stringvalue();

  • }

    獲取註解中的參數名的工具類:

  • packagecom.mikan;

  • importjava.lang.annotation.Annotation;

  • importjava.lang.reflect.Method;

  • /**

  • *@authorMikan

  • *@date2015-08-0500:26

  • */

  • publicclassParameterNameUtils{

  • /**

  • *獲取指定方法的參數名

  • *

  • *@parammethod要獲取參數名的方法

  • *@return按參數順序排列的參數名列表

  • */

  • publicstaticString[](Methodmethod){

  • Annotation[][]parameterAnnotations=method.getParameterAnnotations();

  • if(parameterAnnotations==null||parameterAnnotations.length==0){

  • returnnull;

  • }

  • String[]parameterNames=newString[parameterAnnotations.length];

  • inti=0;

  • for(Annotation[]parameterAnnotation:parameterAnnotations){

  • for(Annotationannotation:parameterAnnotation){

  • if(annotationinstanceofParam){

  • Paramparam=(Param)annotation;

  • parameterNames[i++]=param.value();

  • }

  • }

  • }

  • returnparameterNames;

  • }

  • }

測試類:

  • packagecom.mikan;

  • importjava.lang.reflect.Method;

  • importjava.util.Arrays;

  • /**

  • *@authorMikan

  • *@date2015-08-0423:40

  • */

  • publicclassParameterNameTest{

  • publicvoidmethod1(@Param("parameter1")Stringparam1,@Param("parameter2")Stringparam2){

  • System.out.println(param1+param2);

  • }

  • publicstaticvoidmain(String[]args)throwsException{

  • Class<ParameterNameTest>clazz=ParameterNameTest.class;

  • Methodmethod=clazz.getDeclaredMethod("method1",String.class,String.class);

  • String[]parameterNames=ParameterNameUtils.(method);

  • System.out.println(Arrays.toString(parameterNames));

  • }

  • }

『貳』 java怎樣獲取url參數

如果是javaweb 項目,那麼非常簡單,直接調用 HttpServletRequest 對象的 .getParamter("參數名稱") 方法即可得到。
如果是普通java 項目:
/**
* 獲取網址的指定參數值
*
* @param url
* 網址
* @param parameter
* 參數名稱
* @author cevencheng
* @return
*/
public static String getParameter(String url, String parameter, String defaultValue) {
try {
final String charset = "utf-8";
url = URLDecoder.decode(url, charset);
if (url.indexOf('?') != -1) {
final String contents = url.substring(url.indexOf('?') + 1);
HashMap<String, String> map = new HashMap<String, String>();
String[] keyValues = contents.split("&");
for (int i = 0; i < keyValues.length; i++) {
String key = keyValues[i].substring(0, keyValues[i].indexOf("="));
String value = keyValues[i].substring(keyValues[i].indexOf("=") + 1);
if (key.equals(parameter)) {
if (value == null || "".equals(value.trim())) {
return defaultValue;
}
return value;
}
map.put(key, value);
}
}
return null;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

『叄』 如何獲取java泛型的參數類型

一般可以使用反射來獲取泛型參數的實際類型,以下是詳細代碼:
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;

public class GenericTest {
/*使用反射來獲取泛型信息*/
private Map<String, Integer> score;
public static void main(String[] args) throws SecurityException, NoSuchFieldException {
//Class clazz = GenericTest.class;
Class<GenericTest> clazz = GenericTest.class;
//System.out.println(clazz);
Field f = clazz.getDeclaredField("score");

//直接使用getType只對普通類型有效,無法取到泛型參數
Class<?> a = f.getType();
System.out.println("score的類型是:"+a);

//獲得Field實例f的泛型類型
Type gType = f.getGenericType();
//如果gType類型是ParameterizedType的對象
if (gType instanceof ParameterizedType) {
ParameterizedType pType = (ParameterizedType) gType;
//獲取原始類型
Type rType = pType.getRawType();
System.out.println("原始類型是:"+rType);
//取得泛型類型參數
Type[] tArgs = pType.getActualTypeArguments();
System.out.println("泛型類型是:");
for (int i = 0; i < tArgs.length; i++) {
System.out.println("第"+i+"個泛型類型是:"+tArgs[i]);
}
}else{
System.out.println("獲取泛型類型出錯!");
}
}
}
輸出結果如下:
score的類型是:interface java.util.Map
原始類型是:interface java.util.Map
泛型類型是:
第0個泛型類型是:class java.lang.String
第1個泛型類型是:class java.lang.Integer

『肆』 java怎麼獲取方法參數名

在java中,可以通過反射獲取到類、欄位、方法簽名等相關的信息,像方法名、返回值類型、參數類型、泛型類型參尺培談數等,但是不能夠獲取方法的參數名。在實際開發場景中,有時需要根據方法的參數名做一些操作,比如像spring-mvc中,@RequestParam、@PathVariable註解,如果不指定相應的value屬性,默認就是使用方法的參數名做為HTTP請求的參數名,它是怎麼做到的呢?
在這樣情況下,有兩種方法獲取方法來解決這種需求中纖,第一種方法是使用註解,在註解中指定對應應的參數名稱,在需要使用參數名稱時,獲取註解中相應的值即可。第二種方法是從位元組碼中獲取方法的參數名,但是這有一個限制,只有在編譯時使用了-g或-g:vars參數生成了調試信息,class文件中才會生成方法參數名信息(在本地變數表LocalVariableTable中),而使用-g:none方式編譯的class文件中是沒有方法參數名信息的。所以要想完全不依賴class文件的編譯模式陵碰,就不能使用這種方式。

『伍』 java 怎麼在當前方法內部得到當前方法的參數類型列表

java在當前方法內部想得到當前方法參數類型列表,可以通過對該方法所在的類進行反射來得到當前方法的參數列表。對當前對象進行反射可以得到類中所有成員變數和方法的對象數組,對當前方法的名字與方法數組進行比較,得到相同名字的方法(即當前方法),然後通過使用該方法對象的方法來獲得參數列表。

熱點內容
linuxshell腳本中if 發布:2024-05-07 13:25:01 瀏覽:221
phpmysql擴展 發布:2024-05-07 13:25:01 瀏覽:800
星密碼開網店怎麼樣 發布:2024-05-07 13:23:26 瀏覽:354
安卓手機java模擬器 發布:2024-05-07 12:43:07 瀏覽:913
c語言java哪個好學 發布:2024-05-07 12:35:16 瀏覽:335
奧特曼訪問 發布:2024-05-07 12:34:38 瀏覽:894
離線存儲本地存儲 發布:2024-05-07 12:30:23 瀏覽:413
win764sql2000安裝 發布:2024-05-07 12:18:07 瀏覽:78
beego上傳文件 發布:2024-05-07 11:59:20 瀏覽:211
安卓如何設置拒接來電 發布:2024-05-07 11:56:25 瀏覽:570