【问题标题】:This method is an undefined type of object此方法是未定义类型的对象
【发布时间】:2016-07-22 08:58:34
【问题描述】:

我正在尝试从 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();
    }
}

【问题讨论】:

  • setName 在您的callSetNameFunction() 中缺少参数
  • 如果你解决这个问题并运行它,你会得到一个*Error,因为setName 方法会在无限递归调用中调用自己。

标签: java android eclipse methods


【解决方案1】:

3 处更正

  • Object myObject必须是WebView myObject;
    如果你想使用来自WebView对象的方法,你必须将WebFragment类的myObject属性声明为@如果您想使用它声明的方法,请输入 987654326@。
    注意:您还必须将 getter 签名更改为 public WebView getWebView() {

  • myObject.setName(); 应该接收一个参数,即:myObject.setName("name");

  • 没有参数的构造函数在赋值时不生效:

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

    必须是:

    public WebView () {
    }
    

【讨论】:

  • 谢谢,现在明白了。
【解决方案2】:

改变你的方法来跟随

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 类有关。所以 Object 类引用找不到它。

【讨论】:

  • 干杯,改正一下,有点明白了
  • @BashirskCFC 恕我直言铸造在这里不是一个好的选择,设计是错误的(将myObject 或任何其他属性声明为Object 不是一个好的做法)。该解决方案忽略了错误的设计并做出了丑陋的解决方法。
  • @JordiCastilla 我还没有投射它,我只是使用了该对象并调用了该方法并为其添加了一个参数myObject.setName("sk");
最近更新 更多