Я попал в другой «философский» вопрос относительно Java.Речь идет о следующем сценарии:
У вас есть класс T
, который определяет интерфейс L
, который должен использоваться в качестве прослушивателя, уведомителя для второго класса.
Теперь выиметь второй класс (в следующем коде это классы A
и B
).Этот класс создаст новый объект класса T
и использует L
, который последний будет использовать для связи с первым.
Итак, я представляю 4 разные версии того, как он может передавать объект Listener.T
:
Классы A
определяют реализацию L
, класс LL
и используют его новый объект для создания T
класса.
A1
предварительно выделяет объект A2
создает на месте новый объект
Классы B
useвстроенный способ создания объекта с использованием анонимных классов L
(спасибо Тиму Бендеру за исправление)
B1
предварительно выделяет объект B2
создаетновый объект на месте
Мой вопрос: является ли какая-либо из этих версий более эффективной в той или иной мере?Кто-то из них по какой-то причине небезопасен?Пожалуйста, обсудите, предложите другие версии и объясните!
Класс T
class T extends TT{
public interface L{
public void do(int i);
}
private L Lo;
T(L i){
Lo = i;
}
public void start(){
// do stuff
L.do(0);
}
}
Класс A
class A1{
private class LL implements L{
@Override
public void do(int i){
// do stuff
}
}
private LL l = new LL();
public void function(){
T t = new T(l)
}
}
class A2{
private class LL implements L{
@Override
public void do(int i){
// do stuff
}
}
public void function(){
T t = new T(new LL())
}
}
Класс B
class B1{
private L l = new L(){
@Override
public void do(int i){
// do stuff
}
};
public void function(){
T t = new T(l);
}
}
class B2{
public void function(){
T t = new T(new L(){
@Override
public void do(int i){
// do stuff
}
});
}
}