powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / поиск всех классов
18 сообщений из 18, страница 1 из 1
поиск всех классов
    #39769153
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здравствуйте всем!
ребят что скажете на счет такого решение:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
....
        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("-----");
        }
    }
....



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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;
    }
}
...
Рейтинг: 0 / 0
поиск всех классов
    #39769165
Лысый дядька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарребят что скажете на счет такого решение

ты б хоть парой слов описал, что оно делать то должно
...
Рейтинг: 0 / 0
поиск всех классов
    #39769177
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс сорри :)
в общем идея такая надо получить все классы в указанном пакете, потом их загрузить
...
Рейтинг: 0 / 0
поиск всех классов
    #39769181
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Даже если не будут использоваться?
...
Рейтинг: 0 / 0
поиск всех классов
    #39769185
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
итог полностью отказ от такой конструкции
Код: java
1.
2.
3.
4.
5.
6.
swith(str.substring(0,3)){
    case "BGM":
        BGM bgm = new BGM();
        bgm.getParse(str);
        break;
}



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


Petro123,
да. т.к. не известно какой файл надо читать...
а файл содержит:
Код: plaintext
1.
2.
3.
4.
UNH+KZ0004232+IFTMIN:D:97A:UN:OSJD'
BGM+722+A0123854+9'
DTM+143:201805291338:203'
TSR++0:::2+3'
CUX+1:KZT+7:KZT'
и не всегда они одинаковы последовательны...
...
Рейтинг: 0 / 0
поиск всех классов
    #39769206
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффаритог полностью отказ от такой конструкции
Код: java
1.
2.
3.
4.
5.
6.
swith(str.substring(0,3)){
    case "BGM":
        BGM bgm = new BGM();
        bgm.getParse(str);
        break;
}


А чем плохо?
У тебя класс это парсер файла?
А какой нужно парсер определяется не по расширению файла, а по....?
...
Рейтинг: 0 / 0
поиск всех классов
    #39769209
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
положить все парсеры в один пакет ?

Код: java
1.
2.
3.
4.
5.
6.
7.
String parserName = ....;

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



Я исходил из того что парсеры простые т.е. по сути парсер это один класс.
...
Рейтинг: 0 / 0
поиск всех классов
    #39769232
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

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

1) там у меня порядка 100 таких команд (BGM, DTM,....) получились... проблема была именно при добавлении и главное чтоб их всех включил этот свитч... можно попросту запутаться )
2) да парсер только не файла а строку
3) в каждой строке первые 3 буквы означают что за строка... по ним и ищу в мапе (и классы наименованы по этим трем буквам)
...
Рейтинг: 0 / 0
поиск всех классов
    #39769255
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарда парсер только не файла а строкуя фигею. Т.е.формат строго одна строка и идти могут вперемежку.
...
Рейтинг: 0 / 0
поиск всех классов
    #39769258
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
+1
...
Рейтинг: 0 / 0
поиск всех классов
    #39769260
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

к сожалению так и есть
инструкция состоит из 500+ листов
...
Рейтинг: 0 / 0
поиск всех классов
    #39769265
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Заранее грузи все, иначе накладные расходы из за мелкого дробления.
...
Рейтинг: 0 / 0
поиск всех классов
    #39769288
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,

как я понимаю парсерНейм это и есть название_класса/название_команды?
но мне же изначально не известен этот нейм
...
Рейтинг: 0 / 0
поиск всех классов
    #39769299
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарlleming,

как я понимаю парсерНейм это и есть название_класса/название_команды?
но мне же изначально не известен этот нейма что тогда парсишь?
- получил строку, прочитал слово и подключил парсер.
Юз кейс?
...
Рейтинг: 0 / 0
поиск всех классов
    #39769343
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарlleming,

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

Музаффар (и классы наименованы по этим трем буквам)
...
Рейтинг: 0 / 0
поиск всех классов
    #39769400
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,

однако прикольное решение...
только надо правильно обработать эксепшены...
...
Рейтинг: 0 / 0
поиск всех классов
    #39769407
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
Ну и почему при команде импорт или "команды пришли" не загрузить сразу все классы 200 штук что есть?
...
Рейтинг: 0 / 0
поиск всех классов
    #39769468
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

у меня свой вариант так и делал
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / поиск всех классов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]