2016-07-22 154 views
-1

我想從WebView類訪問setName方法,但當我在調用callSetNameFunction中出現錯誤時出現錯誤。我創建並創建了新的webview對象,並將其存儲在webfragment類中的對象中,但無法訪問webview類中的方法。我怎樣才能做到這一點。我很久沒做java了,還在學習。此方法是一個未定義類型的對象

的WebView類

public class WebView { 

    private String name; 

    public WebView (String name) { 
     this.name = name; 
    } 

    public WebView() { 
     this.name = name; 
    } 

    public void setName(String name) { 
     if(name != null) { 
      this.setName(name); 
     } else { 
      System.out.println("Thats not his name"); 
     } 
    } 

    public String getName() { 
     return name; 
    } 
} 

WebFragment類

public class WebFragment { 

    Object myObject; 

    public WebFragment() { 
     myObject = new WebView(); 
    } 

    public Object getWebView() { 
     return myObject; 
    } 

    public void callSetNameFunction() { 
     myObject.setName(); 
    } 
} 
+0

你的'callSetNameFunction()'中缺少'setName'的參數 – xiaowl

+0

如果解決這個問題並運行它,你會得到一個'StackOverflowError',因爲'setName'方法會調用它自己的無限遞歸呼叫。 – Jesper

回答

2

3更正

  • Object myObject必須WebView myObject;
    如果你想牛逼o使用來自WebView對象的方法,如果要使用它聲明的方法,則必須聲明類的屬性爲WebView類型。
    注:還必須更改getter簽名public WebView getWebView() {

  • myObject.setName();應該接受一個參數,即:

    public WebView() { 
        this.name = name; // Warning: The assignment to variable name has no effect 
    } 
    
    myObject.setName("name");

  • 構造不帶參數ASIGN變量時不會使效果

    必須是:

    public WebView() { 
    } 
    
+1

謝謝,現在明白了。 –

0

改變你的方法,下面

public void setName(String name) { 
    if(name != null) { 
     //this.setName(name); 
     this.name=name; 
    } else { 
     System.out.println("Thats not his name"); 
    } 
} 

而且這樣的:

public void callSetNameFunction() { 
    WebView wvob=(WebView)myObject; 
    wvob.setName("ola");  
} 

的setName方法是使用的WebView class.So Object類中引用不能找到它。

+0

乾杯,糾正它,並理解它一點點 –

+0

@BashirskCFC恕我直言,鑄造不是一個好的選擇,設計是錯誤的(聲明'myObject'或任何其他屬性作爲'對象'不是一個好的做法)。這種解決方案忽略了錯誤的設計並製造了一個醜陋的解決方法。 –

+1

@JordiCastilla我沒有鑄造它,我剛剛使用了這個對象,並調用了方法併爲它添加了一個參數'myObject.setName(「sk」);'' –

相關問題