Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 поиск всех классов  [new]
Музаффар
Member

Откуда: UZB
Сообщений: 1081
здравствуйте всем!
ребят что скажете на счет такого решение:

....
        Map<String, ClInterface> map = new HashMap<>();
        GetClassess gc = new GetClassess();
        try {
            List<Class> classes = gc.getClasses(Main.class.getClassLoader(), "parsers");
            for (Class c : classes) {
                String s = String.valueOf(c);
                if (s.substring(s.indexOf(".") + 1).matches("[A-Z]{3}"))
                    map.put(s.substring(s.indexOf(".") + 1), (ClInterface) c.getDeclaredConstructor().newInstance());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


        for (String s : list1) {
            System.out.println(s);
            if (map.get(s.substring(0, 3)) != null)
                System.out.println(map.get(s.substring(0, 3)).getParse(s));
            System.out.println("-----");
        }
    }
....


public class GetClassess {
    public List<Class> getClasses(ClassLoader cl, String pack) throws Exception {

        String dottedPackage = pack.replaceAll("[/]", ".");
        List<Class> classes = new ArrayList<Class>();
        URL upackage = cl.getResource(pack);


//        DataInputStream dis = new DataInputStream((InputStream) upackage.getContent());
        BufferedReader dis
                = new BufferedReader(new InputStreamReader((InputStream) upackage.getContent()));
        String line = null;
        while ((line = dis.readLine()) != null) {
            if (line.endsWith(".class")) {
                classes.add(Class.forName(dottedPackage + "." + line.substring(0, line.lastIndexOf('.'))));
            }
        }
        return classes;
    }
}
4 фев 19, 12:22    [21801175]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Лысый дядька
Member

Откуда:
Сообщений: 356
Музаффар
ребят что скажете на счет такого решение


ты б хоть парой слов описал, что оно делать то должно
4 фев 19, 12:49    [21801193]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Музаффар
Member

Откуда: UZB
Сообщений: 1081
упс сорри :)
в общем идея такая надо получить все классы в указанном пакете, потом их загрузить
4 фев 19, 13:07    [21801214]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38039
Музаффар,
Даже если не будут использоваться?
4 фев 19, 13:19    [21801225]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Музаффар
Member

Откуда: UZB
Сообщений: 1081
итог полностью отказ от такой конструкции
swith(str.substring(0,3)){
    case "BGM":
        BGM bgm = new BGM();
        bgm.getParse(str);
        break;
}


т.к. у меня таких классов дофига получились...
просто решил таким путем но может будут более красивые идею....


Petro123,
да. т.к. не известно какой файл надо читать...
а файл содержит:
UNH+KZ0004232+IFTMIN:D:97A:UN:OSJD'
BGM+722+A0123854+9'
DTM+143:201805291338:203'
TSR++0:::2+3'
CUX+1:KZT+7:KZT'
и не всегда они одинаковы последовательны...
4 фев 19, 13:24    [21801230]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38039
Музаффар
итог полностью отказ от такой конструкции
swith(str.substring(0,3)){
    case "BGM":
        BGM bgm = new BGM();
        bgm.getParse(str);
        break;
}

А чем плохо?
У тебя класс это парсер файла?
А какой нужно парсер определяется не по расширению файла, а по....?
4 фев 19, 13:51    [21801261]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
lleming
Member

Откуда:
Сообщений: 1555
положить все парсеры в один пакет ?

String parserName = ....;

try{
   return   getClass().forName("org.myapp.myparsers." + parserName).newInstance();
catch(ClassNotFoundException e){
 //...
}


Я исходил из того что парсеры простые т.е. по сути парсер это один класс.
4 фев 19, 13:56    [21801267]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Музаффар
Member

Откуда: UZB
Сообщений: 1081
Petro123,

Petro123
А чем плохо?
У тебя класс это парсер файла?
А какой нужно парсер определяется не по расширению файла, а по....?


1) там у меня порядка 100 таких команд (BGM, DTM,....) получились... проблема была именно при добавлении и главное чтоб их всех включил этот свитч... можно попросту запутаться )
2) да парсер только не файла а строку
3) в каждой строке первые 3 буквы означают что за строка... по ним и ищу в мапе (и классы наименованы по этим трем буквам)
4 фев 19, 14:30    [21801307]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38039
Музаффар
да парсер только не файла а строку
я фигею. Т.е.формат строго одна строка и идти могут вперемежку.
4 фев 19, 14:51    [21801338]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38039
lleming,
+1
4 фев 19, 14:55    [21801344]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Музаффар
Member

Откуда: UZB
Сообщений: 1081
Petro123,

к сожалению так и есть
инструкция состоит из 500+ листов
4 фев 19, 14:56    [21801346]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38039
Музаффар,
Заранее грузи все, иначе накладные расходы из за мелкого дробления.
4 фев 19, 15:01    [21801355]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Музаффар
Member

Откуда: UZB
Сообщений: 1081
lleming,

как я понимаю парсерНейм это и есть название_класса/название_команды?
но мне же изначально не известен этот нейм
4 фев 19, 15:41    [21801398]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38039
Музаффар
lleming,

как я понимаю парсерНейм это и есть название_класса/название_команды?
но мне же изначально не известен этот нейм
а что тогда парсишь?
- получил строку, прочитал слово и подключил парсер.
Юз кейс?
4 фев 19, 16:06    [21801414]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
lleming
Member

Откуда:
Сообщений: 1555
Музаффар
lleming,

как я понимаю парсерНейм это и есть название_класса/название_команды?
но мне же изначально не известен этот нейм


Музаффар
(и классы наименованы по этим трем буквам)
4 фев 19, 17:37    [21801472]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Музаффар
Member

Откуда: UZB
Сообщений: 1081
lleming,

однако прикольное решение...
только надо правильно обработать эксепшены...
4 фев 19, 20:40    [21801558]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38039
Музаффар,
Ну и почему при команде импорт или "команды пришли" не загрузить сразу все классы 200 штук что есть?
4 фев 19, 21:32    [21801586]     Ответить | Цитировать Сообщить модератору
 Re: поиск всех классов  [new]
Музаффар
Member

Откуда: UZB
Сообщений: 1081
Petro123,

у меня свой вариант так и делал
5 фев 19, 06:35    [21801673]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить