2016-05-11 2 views
3

Если у меня есть такой сценарий:Определение типа объекта

interface Node {} 

class EmptyNode implements Node {} 

class NotEmptyNode implements Node {} 

А теперь у меня есть еще один класс,

class List { 
    Node n; 
} 

То, что я пытаюсь сделать, это найти способ, чтобы определить способ получить размер списка узлов. У меня уже есть логика вниз:

public int getSize(Node start) { 
    if (start==EmptyNode) { //Can't do this, not sure how to check if its an empty Node 
     return 0; 
    } 
    else { 
     return 1 + getSize(start.next()); //Want to add 1 and move to next Node 
    } 
} 

С EmptyNode и NotEmptyNode оба типа узла, я знаю, что нужно реализовать функцию, что я могу писать в интерфейс, который будет реализован в обоих классах и быть способный понять, когда был удален конец списка.

+0

'instanceof' - это то, что вы ищете – SomeJavaGuy

+0

Да, я изучил это, но есть ли способ обойти это? – halapgos1

+0

Вам либо нужно использовать .equals() или .instanceof(), == сравнивает хеш-коды в Java – Gala

ответ

7

Вы работаете с примерами здесь. Это означает, что вы можете просто поместить метод isEmpty() в свой интерфейс узла и использовать его для проверки того, что узел пуст.

interface Node { 
    boolean isEmpty(); 
} 

class EmptyNode implments Node { 
    @Override 
    public boolean isEmpty() { return true; } 
} 

class NotEmptyNode implements Node { 
    @Override 
    public boolean isEmpty() { return false; } 
} 

... 

public int getSize(Node start) { 
    if (start.isEmpty()) { 
     ... 
    } 
    else { 
     ... 
    } 
} 

Другим решением является Node реализовать size() функции:

interface Node { 
    int size(); 
    Node next(); 
} 

class EmptyNode implements Node { 
    @Overide 
    public int size() { 
     return 0; 
    } 
    ... 
} 

class NotEmptyNode implements Node { 
    @Overide 
    public int size() { 
     return 1 + next().size(); 
    } 
    ... 
} 

... 

class List { 
    Node n; 

    public int getSize() { 
     return n.size(); 
    } 
} 

Что избавляется от altogother if заявления.

+0

Вы настоящий MVP! – halapgos1

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