2012-04-08 2 views
0

В Java, как я могу получить класс Runnable, который, в зависимости от его конструктора, выбирает его функцию?Runnable Function В зависимости от конструктора

Например:

Class A implements Runnable { 

    public A(int var) { 
     //things go here 
    } 

    public A(int var1, String var2) { 
     //things go here 
    } 

    public void run() { 
     //do (a) if Constructor A(int var) 
     //do (b) if Constructor A(int var1, String var2) 
    } 
} 

ответ

3

Я хотел бы настроить Strategy Строчка:

class A implements Runnable { 

    private final ExecutionStrategy strategy; 

    public A(int var) { 
     strategy = new FooStrategy(); 
    } 

    public A(int var1, String var2) { 
     strategy = new BarStrategy(); 
    } 

    public void run() { 
     strategy.exec(); 
    } 

    interface ExecutionStrategy { 
     public void exec(); 
    } 

    private class FooStrategy implements ExecutionStrategy { 
     @Override 
     public void exec() { 
     //implement me 
     } 
    } 

    private class BarStrategy implements ExecutionStrategy { 
     @Override 
     public void exec() { 
     //implement me 
     } 
    } 
} 
+0

Собирался предложить много же * кроме *, что я буду держать вещи просто: почему бы не определить анонимный Runnable, чтобы вы могли придерживаться интерфейса Runnable? Не нужно вводить больше «типов» для отслеживания внутри головы ... (Помните, что это примерно приближает функции.) – user268396

+1

Я думаю, это вопрос вкуса. Я думаю, что добавление новых типов фактически снижает сложность кода, если они правильно документированы и организованы. –

+0

Также обратите внимание, что этот подход не требует условного кода. –

3

Вы можете сделать это:

class A implements Runnable { 
    int constructor; 

public A(int var) { 
    //things go here 
    constructor = 1; 
} 

public A(int var1, String var2) { 
    //things go here 
    constructor = 2; 
} 

public void run() { 
    if (constructor == 1) ... 
    if (Constructor == 2) ... 
} 

}

Но я бы рекомендовал использовать полиморфизм. Похоже, это два разных класса объектов.

+0

@drum - да - используйте 'if' или' case' заявление: так же, как выборочно запустить любой кусок кода. – jefflunt

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