❶ Java如何獲取方法的參數名稱
package test;
import java.lang.reflect.Method;
public class TTT {
public static void main(String[] args) {
Class c = Test.class;
Method[] methods =c.getDeclaredMethods();
for (Method method : methods) {
System.out.print("方法的返回值"+method.getReturnType().getName());
System.out.print(" 方法名:"+method.getName()+"(");
Class[] paraTypes = method.getParameterTypes();
for (Class class1 : paraTypes) {
System.out.print("參數類型:"+class1.getSimpleName()+",");
}
System.out.println(")");
}
}
}
class Test
{
public void say(String word)
{
System.out.println(word);
}
public void say(String word,int n)
{
for(int i=0;i<n;i++){
System.out.println(word);
}
}
}
===============
方法的返回值void 方法名:say(參數類型:String,)
方法的返回值void 方法名:say(參數類型:String,參數類型:int,)
❷ 怎麼在java方法內部獲得給方法的參數列表。
Class<?>[] paramsClass = method.getParameterTypes();
取得參數列表的所有類型,這個是按這個方法的參數列表的順序給出參數的類型的,有了這個類型就可以了呀,不需要參數名稱;
❸ java中好幾個不同的實體類要調用某個公共的方法,公共方法的參數怎麼寫。
因為,A,B,C沒有繼承公共超類,也沒有實現公共介面,可以考慮使用泛型解決:
class 公共方法
{
public <U> void 方法1(Class<U> cls,U obj)
{
U o=cls.cast(obj);
//調用o的方法
}
}
則這樣使用這個類:
公共方法 cf=new 公共方法();
A a=new A();
cf.方法1(A.class,a);
B b=new B();
cf.方法1(B.class,b);
❹ java 什麼是把方法抽取出來
就是重構->抽取方法,簡單來說就是把部分相關代碼抽取出來成為一個方法,原來代碼的位置改由調用該方法來代替。
如果你使用如Eclipse這種IDE,你可以通過選擇要抽取的代碼,滑鼠右鍵選擇重構->抽取方法,按照步驟給方法命名,確認,IDE就會幫你自動地把代碼抽取出來形成一個私有的方法,原來的位置就會被調用這個方法的代碼代替。
雖然操作步驟很簡單,也就是把代碼換個位置寫,但實際隱含著程序設計的合理性和細粒度的考慮:
很明顯你的代碼里有超長的方法,一般方法會控制在10行以內,超過10行就可以認為有代碼是可以提取出來成為公用方法的。超長的方法常常意味著高耦合、低內聚,重用性差和該類的職責太多。舉個例子:
你的Servlet方法可能幹了很多響應用戶的操作,但有可能Servlet的另一個方法需要做其中一部分相同的操作,或者另外一個Servlet(一個Web應用有多個Servlet很正常)也需要同樣的操作,更甚是一個本地的控制台應用程序(Servlet是屬於會話層的,桌面應用程序一般不需要會話層)也需要做同樣操作。這時候你會發現寫在你的Servlet的代碼只能拷貝到另一個程序中,或者壓根就得重寫,效率很低而且這樣你的代碼里會有很多重復代碼...以後改一下就得改3個地方,不可維護的代碼就是這樣來的。同時你的超長方法也是難以理解的。
如何把握好程序的合理性需要很多的經驗和設計技巧,這里就不提及了。有興趣可以向著面向對象程序設計這個方向鑽研。
❺ java怎麼獲取方法參數名
在java中,可以通過反射獲取到類、欄位、方法簽名等相關的信息,像方法名、返回值類型、參數類型、泛型類型參數等,但是不能夠獲取方法的參數名。在實際開發場景中,有時需要根據方法的參數名做一些操作,比如像spring-mvc中,@RequestParam、@PathVariable註解,如果不指定相應的value屬性,默認就是使用方法的參數名做為HTTP請求的參數名,它是怎麼做到的呢?
在這樣情況下,有兩種方法獲取方法來解決這種需求,第一種方法是使用註解,在註解中指定對應應的參數名稱,在需要使用參數名稱時,獲取註解中相應的值即可。第二種方法是從位元組碼中獲取方法的參數名,但是這有一個限制,只有在編譯時使用了-g或-g:vars參數生成了調試信息,class文件中才會生成方法參數名信息(在本地變數表LocalVariableTable中),而使用-g:none方式編譯的class文件中是沒有方法參數名信息的。所以要想完全不依賴class文件的編譯模式,就不能使用這種方式。