2016-07-22 4 views
-1

Я пытаюсь получить доступ к методу setName из класса WebView, но я получаю сообщение об ошибке при вызове callSetNameFunction. Я создаю и новый объект webview и сохраняю его в объекте в классе webfragment, но не имеет доступа к методам в классе webview. Как я могу это сделать. Я долго не работал, но все еще учился.Этот метод является неопределенным типом объекта

класса 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

Отсутствует аргумент для 'setName' в' callSetNameFunction() ' – xiaowl

+0

Если вы решите это и запустите его, вы получите' StackOverflowError', потому что метод 'setName' будет называть себя бесконечно рекурсивным вызов. – Jesper

ответ

2

3 поправки

  • Object myObject должен быть WebView myObject;
    Если вы хотите т o использовать методы из объекта WebView, вы должны объявить атрибут myObject класса WebFragment как тип WebView, если хотите использовать методы, которые он объявляет.
    ПРИМЕЧАНИЕ: Вы должны изменить также getter подпись public WebView getWebView() {

  • myObject.setName(); должен получить параметр, а именно: myObject.setName("name");

  • Конструктор без параметров не делает эффект при Asign переменной:

    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 ");' –

Смежные вопросы