Загрузка класса с названием из строки

Всем хай
в кратце есть у меня класс
в нем метод
Code:
 public void getContent(String npsName){
        if (npsName == "TesNps"){
            TestNps.load();
        }
    }

он принимает значение npsName и загружает контент из другого класса, я собираюсь создать подобных классов более сотни
как мне избежать сотни конструкций if(){} в этом классе
и как потом обращаться полям класса переданного в строке

как я понимаю это должна быть конструкция типа Class.forName(npsName);
но что делать дальше я не знаю
дело трех строк

просьба если ваш ответ будет подобен Учить Джаву не пишите
 
1,038
57
229
в Java сравнение строк должно быть через Equal

как я понимаю это должна быть конструкция типа Class.forName(npsName);
можно и так

просто вбей в гугл Class.forname и посмотри результаты https://www.geeksforgeeks.org/class-forname-method-in-java-with-examples/

а после ссылки выше, только после неё, читай это
это раздел рефлексия

главное чтобы от всего голова не взорвалась, потому что наши возможности как программистов на столько огромные, будто кажется что они не имеют границ (хотя может это так и есть). И вот чувство бога может сильно затмить разум, а ты всего лишь человек) Поэтому не забывай об этом и что общаешься ты с такими же людьми.
 
Последнее редактирование:
1,038
57
229
1,329
104
225
просьба если ваш ответ будет подобен Учить Джаву не пишите
Учи Java. Если я правильно понял, то все классы будут твои. Тогда будет актуально моё решение. В ином случае - рефлексия.
Загрузку всех этих классов, а точнее даже объектов, можно легко реализовать через наследование + коллекцию. И не нужно будет получать все методы класса через рефлексию.
В коллекцию (скорее всего это будет HashMap) записываешь String и Object, который является родителем всех твоих классов, которые ты будешь регать. Оттуда уже берёшь значения по ключу String. Либо, в класс-родитель запихать String его имени, а в коллекции (которая уже будет не HashMap, а Set) пробегаться по каждому из членов коллекции и сравнивая имя данное с именем класса (которое записано в классе). Мне второй вариант больше нравится.
При инициализации мода просто регаешь в коллекцию все необходимые классы. PROFIT.
 
Code:
    public void getContent(String npsName) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException {
            Class content = Class.forName("com.bodryak.gmod." + npsName);
            Object nps = content.newInstance();
            nps.getClass().getMethod("load");
    }
похоже на дич, как мне выполнить npsName.load()
 

will0376

Токсичная личность
2,059
55
572
Главное учти - рефлексия очень дорога в использовании. Если есть возможность продумать архитектуру мода таким образом, чтоб классы можно было доставать из мапы по string имени - то лучше так и сделать.
в 1.7 и в 1.12 в пре-ините можно было достать список всех классов, над которыми есть какая-либо твоя аннотация - я таким образом реализовывал на 1.7 "модульность" мода с защитой от дебила - нет ic2 в сборке - нечего даже грузить модуль ic2.
 
Возможно когда проект будет дописан, и буду улучшать прибегну к этому
пока уже ко написан и работает так как нужно, оставлю рефлексию
 
1,329
104
225
пока уже ко написан и работает так как нужно, оставлю рефлексию
Нинада так, послушай человека выше.
Если ты используешь рефлексию для своих же классов, то, возможно, ВОЗМОЖНО, ты делаешь что-то не то. Рефлексия, в первую очередь, нужна для вмешательство в сторонние классы.
Если же класс твой, то рефлексия в таком случае не более чем костыль. Причём неповоротливый и громоздкий.
 
Хорошо, что бы понимал, раз прочитав первый пост ты не въехал, я спросил как мне обратиться к классу, в конкретном куске кода, используя конкретный оператор, подразумевается что вне этого класса есть логическая цепочка, которую за ненадобностью я не освещаю, так что то отвлёкся...
Так вот я спросил как, мне дали конкретный ответ, на конкретную ситуацию, с конкретным способом её реализации удобным для меня...
Предложили альтернативу, я от неё отказался, в виду личных убеждений...
Разве я блять спрашивал как лучше, и кого мне слушать, на хуй ты хуиту эту пишешь долбаеб... На хуй ты за Ивана расказываешь, когда спросили за Машку
 
Я ссука даже написал что я этим способом хочу добиться, ебаный ты дегенерат, читай сука сначала что бы отвечать подобное
 
1,329
104
225
Хорошо, что бы понимал, раз прочитав первый пост ты не въехал, я спросил как мне обратиться к классу, в конкретном куске кода, используя конкретный оператор, подразумевается что вне этого класса есть логическая цепочка, которую за ненадобностью я не освещаю, так что то отвлёкся...
Так вот я спросил как, мне дали конкретный ответ, на конкретную ситуацию, с конкретным способом её реализации удобным для меня...
Предложили альтернативу, я от неё отказался, в виду личных убеждений...
Разве я блять спрашивал как лучше, и кого мне слушать, на хуй ты хуиту эту пишешь долбаеб... На хуй ты за Ивана расказываешь, когда спросили за Машку
1. Судя по примеру в шапке, ты хочешь обратиться не к классу, а к объекту класса. Это немножко разное.
2. Только вот твои "личные убеждения" потом сыграют плохую шутку, причём как против тебя, так и против других. Очевидно, что лучше от них сейчас отказаться, нежели потом всю ту конструкцию сносить и делать заново по другому.
3. Спросили за Машку, тебе ответили за Машку Полякову, я ответил за Машку Ронецкую. Ты не уточнил какая Машка (Ронецкая или Полякова) тебе нужна, но ты описал её внешность. Одному показалась что Машка, которую ты ищешь, - Полякова. Я же вижу, что Ронецкая. Достаточно ясный пример?
 
Только вот твои "личные убеждения" потом сыграют плохую шутку, причём как против тебя, так и против других. Очевидно, что лучше от них сейчас отказаться, нежели потом всю ту конструкцию сносить и делать заново по дру
Пиздец ты дебил
 
Дебил - это уже ты, поскольку не слушаешь советов более прошаренных людей.
если бы советчики видели остальной код, и если бы я просил совета, совет был бы актуален
а что не понятного в том что я целинаправлено в своем коде использовал рефлексию и спросил именно как с ней выполнить то что я хочу

разве я спросил как лучше? разве я спросил совета?
давая завязывай с этим
 
343
24
97
разве я спросил как лучше? разве я спросил совета?
давая завязывай с этим
Ответ лишь говорит о высокой неопытности. Новичок сделает упор на "лишь бы работало", человек с высоким опытом смотрит на задачу уже со стороны "как решить её лучше", с вами поделились этим опытом и объяснили, что рефлексию использовать для таких случаев неправильно, но вместо принятия этой помощи, пошли словесные оскорбления с трёх этажным матом. Как итог - относительно медленный и нестабильный код, достаточно переместить/переименовать ваш класс или метод, чтобы его сломать.
 
Ответ лишь говорит о высокой неопытности. Новичок сделает упор на "лишь бы работало", человек с высоким опытом смотрит на задачу уже со стороны "как решить её лучше", с вами поделились этим опытом и объяснили, что рефлексию использовать для таких случаев неправильно, но вместо принятия этой помощи, пошли словесные оскорбления с трёх этажным матом. Как итог - относительно медленный и нестабильный код, достаточно переместить/переименовать ваш класс или метод, чтобы его сломать.
но покачто, мой код работает именно так, как я хочу и именно с тем чем я хочу, решение уже получено и принято мной...
свой код вы писать можете как хотите, со своим я сам разберусь
 
1,329
104
225
а что не понятного в том что я целинаправлено в своем коде использовал рефлексию и спросил именно как с ней выполнить то что я хочу
Не понятно то, зачем ты хочешь с ней работать. Я уже это говорил, но рефлексия - неповоротливый зверь. О чём любезно тебе сказал @mts2200 .
разве я спросил как лучше? разве я спросил совета?
Ты создал тему с вопросом. Очевидно, что люди дадут наиболее исчерпывающий ответ. И этот ответ включает в себя и поиск наилучшего решения.
но покачто, мой код работает именно так, как я хочу и именно с тем чем я хочу, решение уже получено и принято мной...
Возможно ты этого пока не понимаешь, но если код работает как ты хочешь - не значит, что код хороший.
свой код вы писать можете как хотите, со своим я сам разберусь
Мне жаль людей, которые захотят поставить твой мод. А если ты делаешь его на приватный сервер, то мне вдвойне жаль админа этого сервера.
-------------
А теперь коротко о твоих действиях:
Ты просишь помощи с решением вопроса, тебе дают ответ. Советуют также как сделать не только так, чтобы работало, но и так, чтобы оно было эффективно. Вместо того, чтобы принять милость людей, предлагающих помощь (и не сказал бы, что это медвежья услуга, скорее даже наоборот), ты покрываешь их матом и начинаешь всячески оскорблять. Именно так это и выглядит со стороны.
 
Мне жаль людей, которые захотят поставить твой мод. А если ты делаешь его на приватный сервер, то мне вдвойне жаль админа этого сервера.
господи да ни кто его ставить не будет, ровно так же как и твой, и чей либо еще

мне уже начинает все это нравиться
 
Сверху