簡體   English   中英

Java-反射,轉換為未知對象?

[英]Java - Reflection, casting to an unknown Object?

基本上,我瀏覽JFrame中的所有組件,檢查它是否具有方法setTitle(String arg0),如果有,則將其標題設置為“ foo”。 但是,為了設置標題,我需要將其轉換為合適的對象。

    public void updateTitle(Container root){

        for (Component c : root.getComponents()){

            String s = "";
            for (Method m : c.getClass().getDeclaredMethods()){

                s += m.getName();
            }

            if (s.contains("setTitle")){                

                c.setTitle("foo"); //Here is where I need the casting 
            }

            if (c instanceof Container){

                updateTitle((Container) c);
            }
        }           
    }

問題是,我不知道這是什么課。 有什么辦法可以將其轉換為自身,還是我應該嘗試做其他事情?

當有了Method ,可以使用invoke()來調用它:

 for (Method m : c.getClass().getDeclaredMethods()){
     if( "setTitle".equals( m.getName() ) {
         m.invoke( c, "foo" ); // == c.setTitle("foo"); but without the casts
     }
 }

您可以通過反射而不是通過強制調用setTitle()

for (Method m : c.getClass().getDeclaredMethods()){
    if (m.getName().equals("setTitle")) {
        m.invoke(c, "foo");
    }
}

刪除所有其他不必要的代碼。 您的字符串s是無用的(因為無論如何,這是沒有意義的追加所有方法的名稱和檢查contains 。如果類有方法叫什么setTitle ?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM