2016-07-22 11 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

これを解決して実行すると、' setOnflower 'メソッドは無限再帰的コール。 – Jesper

答えて

2

3修正

  • Object myObjectWebView myObject;
    でなければなりませんo WebViewオブジェクトのメソッドを使用する場合は、myObject属性をWebFragmentクラスとして、宣言したメソッドを使用する場合は、WebViewタイプとして宣言する必要があります。
    注:あなたはpublic WebView getWebView() {

  • myObject.setName();からgetter署名がパラメータすなわちを受けるべきでも変更する必要があります。変数をasign時にパラメータなしmyObject.setName("name");

  • コンストラクタは効果がありません:

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

    は、

    である必要があります。
    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 IMHOキャストはここでは良い選択ではありません。設計が間違っています( 'myObject'や他の属性を' Object'として宣言するのは良い方法ではありません)。このソリューションは間違ったデザインを無視し、醜い回避策を講じています。 –

+1

@JordiCastilla私はそれをキャストしなかった、私はちょうどオブジェクトを使用して、メソッドを呼び出して、それに引数を追加した 'myObject.setName(" sk ");' –

関連する問題