2012-05-18 3 views
0

Допустит, у меня есть два подобный класс:класса с селектором статического контента

public class First { 

    public static final String ONE = "1"; 
    public static final String TWO = "2"; 
    public static final String THREE = "3"; 
} 

public class Second { 

    public static final String ONE = "one"; 
    public static final String TWO = "two"; 
    public static final String THREE = "three"; 
} 

Теперь в другом классе Im, используя один из них:

public class Third { 

    //.... 
    @Override 
    public String toString() 
    { 
     System.out.println(First.ONE); 
    } 
} 

Но то, что я пытаюсь сделать сейчас , делает вид селектора, позволяет сказать, что конструктор класса Third получает логическое значение и на его основе выбирает, какой класс использовать, но я не хочу делать if (..) заявление повсюду, вызывать его просто слишком много.

Так абстрактно я хотел бы это:

public class Third { 

    //some global var with reference? to static class 

    public Third(boolean first) 
    { 
     if(first) { 
      //set class First as source of static fields 
     } else { 
      //set class Second 
     } 
    } 

    //.... 
    @Override 
    public String toString() 
    { 
     System.out.println(globalVariableWithReference.ONE); 
    } 
} 

Можно ли не делая istance из этого класса?

+0

так в основном u dnt want 2 использовать if-else в конструкторе Third? – WickeD

ответ

2

Вы можете использовать интерфейс с методами getter, а затем реализовать два интерфейса этого интерфейса (и вернуть их соответствующие значения при вызове методов getter). Затем вы можете создать карту для сопоставления между логическим значением и двумя классами реализации (через интерфейс) и вызвать объект, который сопоставляется с булевым. Конечно, для этого требуется создать объект каждого класса, но вы получите то же поведение.

Другой вариант - создать класс-оболочку, который обертывает логику if/else в свои собственные статические методы и возвращает соответствующее значение из двух классов на основе логического значения. Несмотря на то, что вам нужно будет написать логику if/else для этой обертки clasee, вам не нужно писать это больше, чем один раз, просто вызовите методы класса-оболочки в

+0

Создание и объект - небольшая проблема, можно ли обойтись без него? – kamil

+0

См. Обновленный ответ – Attila

0

Вы можете использовать отражение:

Class x = if (first) First.class : Second.class; 
String one = (String) x.getField("ONE").get(null); 
Смежные вопросы