2015-02-11 3 views
0

Можно ли определить метод без расширения классов?Java переопределяет метод динамически

((JComponent) c).paintComponents(Graphics a) { 
    // Paint some one 
}; 
+0

Что ваша цель? Вы просто пытаетесь сократить количество классов, которые вы пишете? Будет ли использование анонимного класса делать то, что вам нужно? –

+0

В Java все методы должны быть определены внутри класса. Если вы хотите, чтобы метод был доступен без создания экземпляра класса, используйте классификатор 'static'. – mstbaum

+0

stackoverflow.com/questions/4359979/java-equivalent-to-c-sharp-extension-methods –

ответ

-1

Нет. Это невозможно. Java не интерпретируется языком программирования. Он скомпилирован. Например, вы можете сделать это в Ruby.

+1

** Неправильно **. Вы можете сделать это с помощью байт-кода, используя библиотеку cglib, которая позволяет вам писать код * на лету *. –

+0

Да, но мне не нужны манипуляции с внешними библиотеками, такими как Javaassist или другие –

+1

@AdrianPreuss это будет здорово, если вы придадите больше контекста этой проблеме. В принципе, хороший ответ будет: * Да, вы можете. Период *. –

3

Нет, но если вы просто пытаетесь уменьшить количество классов, которые вы должны определить, можно использовать анонимный класс

JComponent c = new JComponent() { 
    @Override public void paintComponent(Graphics g) { 
     // do stuff 
    } 
} 
+0

Да, вы можете, но это слишком сложно, так что это нужно делать, только если вам действительно нужна такая функция. С другой стороны, вы можете использовать шаблон декоратора, чтобы динамически добавлять поведение к вашим объектам. –

+2

@LuiggiMendoza Я бы не назвал этот комплекс, а затем предложил использовать манипуляции с байт-кодом. –

+1

@SotiriosDelimanolis Я назвал комплекс для * да, вы можете (с помощью манипуляции с байт-кодом) *. Фактически, ИМО у нас недостаточно информации в вопросе, чтобы дать правильный ответ. –

Смежные вопросы