Можно ли определить метод без расширения классов?
((JComponent) c).paintComponents(Graphics a) {
// Paint some one
};
0
Adrian Preuss
11 Фев 2015 в 18:24
2 ответа
Нет, но если вы просто пытаетесь уменьшить количество классов, которые вы должны определить, вы можете использовать анонимный класс.
JComponent c = new JComponent() {
@Override public void paintComponent(Graphics g) {
// do stuff
}
}
3
Andy Brown
11 Фев 2015 в 18:28
Да, вы можете, но это слишком сложно, поэтому это нужно делать только в том случае, если вам действительно нужна такая функция. С другой стороны, вы можете использовать шаблон декоратора для динамического добавления поведения к вашим объектам.
– Luiggi Mendoza
11 Фев 2015 в 18:29
2
Я бы не стал называть это сложным, а затем предлагать манипуляции с байт-кодом.
– Sotirios Delimanolis
11 Фев 2015 в 18:33
1
Я упомянул комплекс для да, вы можете (используя манипуляции с байт-кодом). На самом деле, ИМО, у нас недостаточно информации в вопросе, чтобы дать правильный ответ.
– Luiggi Mendoza
11 Фев 2015 в 18:35
1
@Луиджи Мендоза. Спасибо, пенни падает (для меня) - когда я сказал «Нет, но ...», вы правильно сказали «Да, вы можете, если вы сделаете ... (сложные вещи)». Я с вами полностью согласен. Я думаю, что OP потенциально дает нам проблему X Y. Мой ответ был предположением о решении его фактической проблемы и предположением, что он хотел сделать что-то вроде Java, эквивалентного методам расширения C #. Я попросил у него больше контекста, но у нас его пока нет.
– Andy Brown
11 Фев 2015 в 19:10
1
Разве манипулирование байт-кодом не является решением всех ИТ-проблем? Например, если вы манипулируете сохраненным байт-кодом вашего жесткого диска, устанавливая новое приложение... :)
– SME_Dev
11 Фев 2015 в 19:12
Нет. Это невозможно. Java не является интерпретируемым языком программирования. Он скомпилирован. Например, вы можете сделать это на Ruby.
-1
Cortwave
11 Фев 2015 в 18:27
1
Неверно. Вы можете сделать это с помощью манипуляций с байт-кодом, используя такую библиотеку, как cglib, которая позволяет вам писать код на лету.
– Luiggi Mendoza
11 Фев 2015 в 18:28
Да, но мне не нужно манипулировать внешними библиотеками, такими как Javaassist или другими.
– Adrian Preuss
11 Фев 2015 в 18:29
1
Будет здорово, если вы дадите больше контекста проблеме. По сути, хорошим ответом будет: Да, можно. Период.
– Luiggi Mendoza
11 Фев 2015 в 18:30
1
Да, ты можешь. Но это будет плохо спроектированное решение. Если вам действительно нужно использовать эту функцию, вам следует подумать об использовании другого языка программирования.
– Cortwave
11 Фев 2015 в 18:31
Использование манипуляций с байт-кодом — неплохое дизайнерское решение. Это зависит от того, что вам нужно. Например, Spring делает это, когда ему нужно создать прокси для ваших классов, чтобы добавить в них функции управления транзакциями, и я не думаю, что они следуют плохой практике все эти годы на рынке. У нас нет надлежащего контекста, поэтому на этот вопрос нет конкретного ответа, кроме да, это возможно.
– Luiggi Mendoza
11 Фев 2015 в 18:34
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
static
.