Я недавно столкнулся с такой проблемой в моей работе:
Я сделал тестовый инструмент для всех интерфейсов в определенном проекте. Используя технологию Java Swing, проект имеет разные версии. Не все интерфейсы в версии одинаковы, а инструменты, которые я сделал, должны быть совместимы со всеми версиями.
Итак, эта проблема была введена:
Если в некоторых версиях не существует некоторых интерфейсов, при выполнении этой операции будет сообщена ошибка через интерфейс. Поэтому, чтобы быть совместимым со всеми версиями, вы должны рассмотреть вопрос о том, существует ли метод перед вызовом метода. В то же время, чтобы не бросить исключения во время компиляции, при вызове метода
Это также должно быть вызвано посредством размышлений, и конкретная реализация выглядит следующим образом:
1. Используйте отражение, чтобы определить, существует ли метод
/ *** Определите, существует ли метод** @param obj objectservice экземпляр* @param метод имени метода* @param paratypes method form form type array* @return*/ public static boolean justemethodisexist (объект obj, String Methodname, Class [] paratypes) {boolean result = true; try {if (null! = obj) {method method = obj.getClass (). getMethod (methodname, paratypes); }} catch (nosuchmethodexception ex) {showwarninfo (ex.toString ()); log.error ("Исключение происходит по адресу:" + mainjframe.hostname + "; детали:" + ex.getmessage ()); result = false; } return Result; }Описание параметра:
(1) OBJ: объект, который вызывает метод
(2) МЕТОДАМАНА: Имя метода, который будет вызван
(3) Паратипы: тип параметра, требуемый методом (множественная массива)
С помощью этого метода вы можете определить, существует ли метод метода имени (тип параметра), который вы вызовите через объект OBJ. Если его не существует, он запустит исключение nosuchmethodexception
2. Вызовите метод с помощью размышлений, чтобы избежать исключений во времени компиляции
sysuser = mainjframe.getsysuser (); Class [] paramobj = {string.class, long.class, string.class, string.class, int.class}; // судить, существует ли метод логический isexist = commonutil.judgemethodisexist (sysuser, "createbucket", paramobj); if (isexist) {try {// class method class clazz = sysuser.getclass (); // Имя метода-тип параметра в методе метода (в порядке параметра) CreateBucket = clazz.getDeclaredMethod ("createBucket", String.class, long.class, String.class, String.class, int.class); int create = (int) createbucket.invoke (sysuser, bucketName, long.parselong (bucketsize), bucketloc, bucketacl, integer.parseint (stringutil.emptytozero (bucketcycle))); if (create == 1) {commonutil.showinfo («ведра создано успешно»); log.info («ведро создано успешно»); } else {commonutil.showwarninfo ("Не удалось создание ведра, внутренняя ошибка сервера!"); log.info ("Не удалось создание ведра, внутренняя ошибка сервера"); }} catch (Exception ex) {commonutil.showwarninfo (ex.getMessage ()); log.error ("Исключение происходит по адресу:" + mainjframe.hostname + "; детали:" + ex.getmessage ()); }}В приведенном выше коде:
Строка 1: объект Sysuser, который вызывает метод CreateBucket
Строка 2: массив типов параметров в методе, используемый при определении того, существует ли метод
Строка 3: Определите, существует ли метод массивом объекта, имени метода и типа параметра
Через три вышеупомянутые строки будут выполнены следующие задачи при существующем методе. Если его не существует, информация об исключении будет вызвана.
Строка 6: Получите класс объекта
Строка 7: Получить объект метода метода, параметр - это тип, соответствующий имени метода и параметра
Строка 8: Вызовите метод CreateBucket через отражение объекта метода, параметры являются объектом Sysuser и требуемыми параметрами (значениями) соответственно.
Благодаря вышеуказанному методу, исключения времени компиляции не происходит, даже если интерфейс в объекте не существует.
Честно говоря, это первый раз, когда я столкнулся с проблемой с отражением Java в моем проекте, поэтому необходимо ее записать!
Суммировать
Выше приведено все содержание примечаний этой статьи о размышлении о Java в реальной работе. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на этот сайт:
Учебное пособие по размышлению Java
Вещи, которые вам нужно знать о механизме отражения Java
Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!