Почему мои методы просто пропускают? - PullRequest
0 голосов
/ 29 января 2012

У меня два вопроса - я новичок в Java, но у меня огромный Java-проект :(

  1. Если я реализую класс (который представляет собой интерфейс с двумя пустыми методами)) и я пытаюсь написать другой метод в моем классе, он компилируется, но во время выполнения метод пропускается? Что я могу делать неправильно?

  2. Как запустить класс из другогокласс, который не является основным. Так что в основном основной запускает класс, который затем вызывает другой класс ...

Я знаю, что эти вопросы довольно ограничены с точки зрения содержания, но программа действительнокомплекс просто невозможно объяснить все: (

Любая помощь будет высоко ценится :) Спасибо !!

--- обновлено - по запросу

 class FriendLists implements Results {
     public void processCommunication (Communication d)  {...}

     public void postProcess() {...}

     //the above two run perfectly

     //I don't know what to do next. 
     //I'm trying to create a link to my other class, to use the values values 
     //but when compiled and running it skips this method (and all other methods except the above two

     public void processCommunication(AggregatedDirect f) {
     //does something from the class I'm trying to run
      man = f.getNumTargets(); //getNumTargets is a value in the AggregatedDirect Class
     }

,

interface Results {
void processCommunication (Communication c) throws SAXException;
    void postProcess();

}

,

  public  class AggregatedDirect extends Communication {
ArrayList<Integer> targets;


public AggregatedDirect(Direct d) {
    super();
    targets = new ArrayList<Integer>();
    this.type = d.getType();
    this.invocSerial = d.getInvocSerial();
    this.serial = d.getSerial();
    this.usage = d.getUsage();
    this.messageType = d.getMessageType();
    this.characterID = d.getCharacterID();
    this.characterStatus = d.getCharacterStatus();
    this.locationID = d.getLocationID();
    targets.add(d.getTargetCharacterID());
    this.targetCharacterID = -1;
    this.targetCharacterStatus = -1;
    this.targetCharacterLocationID = -1;
    this.message = d.getMessage();
    this.time = d.getTime();
    this.annotation = d.getAnnotation();
}

public void addTarget(int targetCharacterID) {
    targets.add(targetCharacterID);
}

public void addTarget(Direct d){
    addTarget(d.getTargetCharacterID());
}

public int getNumTargets() {
    if (targets == null)
        return -1;
    else
        return targets.size();
}
public ArrayList<Integer> getTargets() {


     return targets;
    }
}
  • Опишите класс Communication здесь.
  • Абстрактный суперкласс всего общения
  • подклассы.
  • в действии - обрабатывает файл XML и разделяет его

    • Direct расширяет связь // это в основном одно из строковых значений в файле XML

Ответы [ 2 ]

1 голос
/ 29 января 2012

Если вы добавите другой метод в ваш класс, но этот метод не определен в вашем интерфейсе, и вы используете интерфейс в качестве типа при создании экземпляра объекта, тогда среда выполнения Java не будет знать, что метод существует.

Например:

Class MyClass implements List {

    public void method1() {
        // do stuff
    }

    public void method2() {
        // do other stuff
    }

    public void method3() {  // not defined in Interface
        // do yet other stuff
    }

}


Interface List {

    void method1();

    void method2();

}

Теперь, если класс обслуживания в вашем коде возвращает объект типа «Список», то ваш вызывающий класс не будет знать подтип:

 List list = getMyList();

 list.method3();  // doesn't know what this is because it's type List not type MyClass
1 голос
/ 29 января 2012

Вы должны вызвать метод для его запуска, так что, скажем, у вас есть метод с именем

public void someMethod(){ 
   // method contents
}

чтобы запустить его, вам нужно будет вызвать someMethod(); из scope этого метода .

Чтобы вызвать метод из другого класса, вы обычно должны сначала создать instance или object этого класса. Скажем, класс называется OtherClass, и в этом классе есть метод с именем otherMethod(), в вашем текущем классе вам нужно будет создать объект типа OtherClass, например:

OtherClass otherClass = new OtherClass();

затем вызовите другой метод, используя

otherClass.otherMethod();

Если этот ответ слишком прост, дайте нам знать. :)

...