2013-11-14 4 views
-1

В внешнем классе есть внутренний интерфейс, внутренний абстрактный класс и внутренний класс.Как использовать ссылочный параметр внутреннего абстрактного класса в JAVA

Когда я вызываю метод outerMethod() из OuterClass,

метод класса AKindBiz может печатать только содержимое списка.

Почему метод абстрактного класса (CommonKindBiz) ничего не может распечатать?

public class OuterClass { 

    public void outerMethod() throws Exception{ 
     ArrayList<String> list = new ArrayList<String>(); 
     list.add("1111"); 
     list.add("2222"); 

     KindBiz biz = new AKindBiz(); 
     biz.execute(list); 
    } 

    public interface KindBiz 
    { 
     public void execute(ArrayList<String> inputList) throws Exception; 

     public void preExec(ArrayList<String> inputList) throws Exception; 
     public void exec(ArrayList<String> inputList) throws Exception; 
     public void postExec(ArrayList<String> inputList) throws Exception; 
    } 

    abstract public class CommonKindBiz implements KindBiz 
    { 

     public void execute(ArrayList<String> inputList) throws Exception{ 
       System.out.println("KindBiz.CommonKindBiz.execute ### inputList1 : " + inputList); // Nothing printed. 

       this.preExec(inputList); 
       this.exec(inputList); 
       this.postExec(inputList); 
     } 

     public void preExec(ArrayList<String> inputList) throws Exception 
     {  
       System.out.println("KindBiz.CommonKindBiz.preExeC### inputList : " + inputList); // Nothing printed. 
     } 

     public abstract void exec(ArrayList<String> inputList) throws Exception; 

     public void postExec(ArrayList<String> inputList) throws Exception 
     {   
       System.out.println("KindBiz.CommonKindBiz.postExeC### inputList : " + inputList); // Nothing printed. 
     }  
    } 

    public class AKindBiz extends CommonKindBiz 
    { 
     @Override 
     public void exec(ArrayList<String> inputList) throws Exception 
     {   
       System.out.println("KindBiz.AKindBiz.exeC### inputList : " + inputList); // "1111", "2222" printed. 
     } 

    } 

} 

Заранее спасибо.

+1

Что вы подразумеваете под словом "can not print anything"? Непонятно, что происходит не так. –

+0

@JonSkeet С этим глубоким вложением интерфейсов, класса и абстрактного класса это не похоже на проблему с дизайном? =) –

+1

@LittleChild: Ну, это далеко не идеальный вариант, но я хотел бы знать, с чем работает OP, и исправить это сначала, а затем исправить все остальное ... –

ответ

0
System.out.prinfln("KindBiz.CommonKindBiz.execute ### inputList1 : " + inputList); // Nothing printed. 

эта линия, похоже, проблема. Это println(). Везде в вашем коде есть prinfln(). Замените те, с println()

Update:
Как RC и Субаше отметил, ваши методы заявляют, что они будут принимать 2 параметра, но вы только дать им 1, когда вы их называете. Вам нужно дать им 2 или изменить подпись вашего метода.

Пожалуйста, используйте IDE. Эти ошибки, такие как несоответствие параметров, могут быть легко указаны IDE и с правильным описанием того, что не так и как их исправить.

0

Я отредактировал ваш код, чтобы он скомпилировался.

Я проверил его, и все линии напечатаны. Я не верю, что есть проблема.

+0

У меня также есть успешный тест. Возможно, исходные коды имеют другую проблему, которая не связана с внутренними абстрактными calss. В следующий раз я спрошу еще одну проблему после проверки кода. Спасибо. – user2990699

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