2015-02-10 4 views
0

У меня есть код, где я вызываю реализованный метод в классе i.e cmpreValue (int real, int virtual);Как обработать наследование, если подкласс уже расширен с базовым классом

public class TestCompare extends TestBaseClass { 
    private static final Logger logger = Logger.getLogger(TestCompare.class.getName()); 
    String virtual= null; 
    String real= null; 
    XLSParser objVal ; 

    public void testSomeThing() { 
     // Returns some string value 
     real= objVal.getSomeStringValue(); 
     virtual= getExpectedValue();  
     cmpreValue(virtual, real);   
    } 

    void cmpreValue(String virtual, String real) 
    { 
     if(real.equals(virtual)) 
     { 
      logger.info(real); 
     } 
     else{ 
      logger.info(virtual); 
     } 
    } 

Здесь cmpreValue(String virtual, String real) используется один раз, но я хочу, чтобы использовать эту функцию в моем другом классе, а также. Так что я попытался сделать еще один мой класс т.е.

public class Helpervalidate{ 
    void cmpreValue(String virtual, String real) 
    { 
     if(real.equals(virtual)) 
     { 
      // Not Visible objVal 
      logger.info(**objVal**.something()); 
     } 
     else{ 
      logger.info(virtual); 
     } 
    } 

и создание объекта класса Helpervalidate в моем классе TestCompare и вызов функции cmpreValue в классе TestCompare, но тогда я получаю ошибку objVal не определено в классе Helpervalidate.

Как мой класс TestCompare уже расширяет TestBaseClass, поэтому я не могу пойти на другое расширение класса. Итак, как я могу сделать свою функцию cmpreValue (String virtual, String real) повторно используемой для других классов? Есть ли способ, когда я просто добавляю funtion cmpreValue (String virtual, String real) и передаю значения, и он отлично работает?

+0

Можете ли вы добавить свойства в класс 'Helpervalidate'? Тогда я могу помочь. –

+0

Почему у вас есть 'logger.info (real)' в одной версии метода и 'logger.info (objVal.something()) в другом? Какое значение? – PDStat

+0

@AnindaBhattacharyya: Да, я могу добавить ... пожалуйста, помогите. –

ответ

0

Вы должны передать все параметры, необходимые в методе Helpervalidate.cmpreValue. т.е. изменить сигнатуру метода для:

void cmpreValue(String virtual, String real, XLSParser objVal) 
+0

Спасибо, что ответили. Я могу передать только два параметра в функции i.e реального и виртуального. Это что-то вроде замораживания кода для меня, я не могу вносить изменения в параметр. –

+0

Вы получаете исключение? Если так, то, что это? – bhspencer

+0

Ошибка времени компиляции. –

0

Как об использовании помощника только для сравнения, и сделать все протоколирование внутри класса?

Если у вас есть метод с именем "cmpreValue", неправильно делать что-либо еще.

0

В целом: для передачи информации в классе вы должны либо

  • ссылка Магазин для objVal внутри класса и обеспечивают это значение в конструкторе/сеттер

    public class Helpervalidate{ 
        XLSParser objVal ; 
        void cmpreValue(String virtual, String real){ 
         //do stuff  
        } 
    } 
    
  • Вводят его в метод

    public class Helpervalidate{ 
        void cmpreValue(String virtual, String real, XLSParser objVal){ 
         //do stuff  
        } 
    } 
    
0

Добавить объект objVal в ваш помощник. Создавайте геттеры и сеттеры. Установите значение из вызывающего, создавая экземпляр класса-помощника.

HelperValidate validate 
= new HelperValidate(); 
validate.setObjVal(); 

И затем используйте это в своем методе как this.objVal.

Надеюсь, это поможет.