Когато се обаждате на "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
статично има съвсем малко смисъл.