Можно ли определить метод без расширения классов?Java переопределяет метод динамически
((JComponent) c).paintComponents(Graphics a) {
// Paint some one
};
Можно ли определить метод без расширения классов?Java переопределяет метод динамически
((JComponent) c).paintComponents(Graphics a) {
// Paint some one
};
Нет. Это невозможно. Java не интерпретируется языком программирования. Он скомпилирован. Например, вы можете сделать это в Ruby.
** Неправильно **. Вы можете сделать это с помощью байт-кода, используя библиотеку cglib, которая позволяет вам писать код * на лету *. –
Да, но мне не нужны манипуляции с внешними библиотеками, такими как Javaassist или другие –
@AdrianPreuss это будет здорово, если вы придадите больше контекста этой проблеме. В принципе, хороший ответ будет: * Да, вы можете. Период *. –
Нет, но если вы просто пытаетесь уменьшить количество классов, которые вы должны определить, можно использовать анонимный класс
JComponent c = new JComponent() {
@Override public void paintComponent(Graphics g) {
// do stuff
}
}
Да, вы можете, но это слишком сложно, так что это нужно делать, только если вам действительно нужна такая функция. С другой стороны, вы можете использовать шаблон декоратора, чтобы динамически добавлять поведение к вашим объектам. –
@LuiggiMendoza Я бы не назвал этот комплекс, а затем предложил использовать манипуляции с байт-кодом. –
@SotiriosDelimanolis Я назвал комплекс для * да, вы можете (с помощью манипуляции с байт-кодом) *. Фактически, ИМО у нас недостаточно информации в вопросе, чтобы дать правильный ответ. –
Что ваша цель? Вы просто пытаетесь сократить количество классов, которые вы пишете? Будет ли использование анонимного класса делать то, что вам нужно? –
В Java все методы должны быть определены внутри класса. Если вы хотите, чтобы метод был доступен без создания экземпляра класса, используйте классификатор 'static'. – mstbaum
stackoverflow.com/questions/4359979/java-equivalent-to-c-sharp-extension-methods –