У меня возник еще один «философский» вопрос относительно Java. Речь идет о следующем сценарии:В чем разница между реализациями класса Listener?
У вас есть класс T
, который определяет интерфейс L
, который будет использоваться в качестве прослушивателя, оповещения для второго класса.
Теперь у вас есть второй класс (в следующем коде они относятся к классам и B
). Этот класс создаст новый объект класса T
и использует L
, который последний будет использовать для связи с первым.
Так я представляю 4 различные версии того, как его Слушатель объект может быть передан T
:
Классы
A
определяют реализациюL
, классLL
и использовать новый объект его создать aT
класс.A1
предварительно выделяет объектA2
создает новый объект на месте
Классы
B
использовать встроенный способ создания объекта путем использования анонимных классовL
(спасибо Тим Бендер для коррекции)B1
предопределяет объектB2
создает новый объект на месте
Мой вопрос, является любой из более эффективных в той или иной форме эти версии? Кто-нибудь из них небезопасен по какой-то причине? Пожалуйста, обсудите, предложите другие версии и объясните!
класса Т
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
}
});
}
}
Ваше утверждение: «Классы B используют встроенный способ создания объекта без явного реализации интерфейса L». Интерфейс L явно реализован. То, что вы пытаетесь описать, обычно называют анонимным классом. –
@Tim Bender, спасибо за исправление; поэтому в основном 'A' и' B' на самом деле не отличаются друг от друга, когда речь заходит о двоичном коде, это просто выбор программиста – alkar