/ / Кога да се позовава на main, а не main call? - java, клас, размисъл, основен, извикване

Кога да се извика главната, а не главната? - java, класа, размисъл, главно, позоваване

Когато се обаждате на "main", който съществува в друг клас, е доста лесно да се каже:

 otherClass.main(stringArgs);

Каква е причината първо да използваме размисъл, за да получим класа и след това да използваме метода, различен от статичния начин?

Отговори:

4 за отговор № 1

Причината може да е, че ако използвате отражение, не е необходимо да имате зависимост от време на компилиране от класа, към който се позовавате main метод на. Можете да зареждате класа динамично, като използвате Class.forName(...), след това използвайте размисъл, за да намерите main метод и го извикайте.

String name = "com.mycompany.MyMainClass";

// Load the class dynamically
Class<?> mainClass = Class.forName(name);

// Find the "main" method that takes a string array
Method mainMethod = mainClass.getMethod("main", new Class<?>[] { String[].class });

// Invoke the method; first arg is null, because the method is static
mainMethod.invoke(null, new String[] { "one", "two" });

1 за отговор № 2

Не знам защо правиш това някога. Никога не ми е било необходимо да се позовавам на друг основен метод по този начин, освен когато правех нещо хаки или експериментирах.

Но като цяло използвате размисъл, за да извикате методвместо да го извиквате директно, когато не знаете достатъчно за класа, в който се извиквате, или за когато търсите и извиквате методи, маркирани с пояснение.

За това е предназначено отражението.


1 за отговор № 3

Има много причини да се използва размисъл. Но ако имате екземпляр от клас (или името на клас, ако говорим за статичен метод) и знаете името на метода, който искате да извикате (по време на компилиране), не трябва да използвате размисъл ,

За да ви дам пример, една от причините да използвате размисъл е, ако по някаква причина имате а String съдържащ име на метод (нека да кажем, че получавате това от потребителя) и искате да извикате този метод от конкретен клас. Очевидно не можете просто да кажете otherClass.methodName от methodName ще се различава в зависимост от това, което потребителят въвежда.


1 за отговор № 4

В повечето случаи използват, когато е необходимо да се обадите main възниква изобщо, то е в контекста, в койтоклас не е познат по време на изграждане и вероятно не е дори в кодовата база, която обажда. Това може да е причината, поради която най-често сте свидетели на размишляващи обаждания на main.

Наистина, обаждане main статично има съвсем малко смисъл.