Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Вложенные классы


Автор: Coocky 9.7.2013, 23:51
Код

public class A {

    class Data {

        String a;
        String b;
        String c;
    }

    void run() {
        
        ArrayList<Data> array = new ArrayList<Data>array();
        
        for(......){
            Data data = new Data();
            data.a = "aaa";
            data.b = "bbb";
            data.b = "ccc";
            array.add(data);
        }
        
        callback.SendToAnotherThread(array); //калбек функция. callback-указатель на класс B
    }
    
    .........................
    another thread
    another class
             .........................
    
    public class B{
        
        class Data {

            String a;
            String b;
            String c;
        }
        

        void SendToAnotherThread(Object param){ 

            ArrayList<Data> data = (ArrayList<Data>)param;

            Data ups = data.get(0); //fail. Хотя в отладчике видно, 
                                                                                 // что обьект имеет данные, валидные
        }
    }
}


Страно-почему падаю. Думаю разберусь, но хочу узнать-можно ли так делать в Яве?
Т.е. я хочу передать, выражаясь языком  С++ -некий массив структур, в даном случае -Data

Правильно ли я делаю? 

Автор: Beard 10.7.2013, 13:23
Цитата(Coocky @  9.7.2013,  23:51 Найти цитируемый пост)
Страно-почему падаю. Думаю разберусь, но хочу узнать-можно ли так делать в Яве?

Потому что вот тут синтаксическая ошибка (слово array в конце лишнее):
Код

ArrayList<Data> array = new ArrayList<Data>array();

И потому что в рантайм B::SendToAnotherThread лист кастится не к тому типу - у Вас два идентичных класса Data, один из A, а другой в B - один надо убрать.
И так класс Data не зависит от A, его можно сделать static или вообще вынести в отдельный файл.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)