2014-11-30 2 views
0

так я иду от переменного тока # .net фон ,, и я пытаюсь сделать это в JavaC# .net события и ява

Class A{ 

public delegate void EventHandler(); 

    public static event EventHandler workComplete(); 

void doWork(){ 

    // DO WORK 

} 

void onWorkComplete(){ 

    // Riase Event 

    workComplete(); 

} 

} класса Main {

A a = new A(); 

a.workComplete +=() -> { 

    // On Class A Complete Work 

    Console.WriteLine("Work Complete"); 

`
}; }

Я ищу делегатов в событии Java-события, являются делегатами-заказчиками, как в C# .net, но похоже, что у Java нет делегатов, тогда я хочу, чтобы искать, как события работают на Java, тогда я падаю на три вещи 1- Действие Listener 2- События Слушатель 3- и много интерфейсов модели 4-наблюдатель

и все это смешать до меня ,, может быть, потому что я просто понимаю, C# события, которые использует делегатов.

Так что если кто-нибудь может дать пример примера, например, код C# .net выше, в Java это будет очень полезно.

Thank you.

+0

Java использует шаблон наблюдателя (обычно называемый как Listeners in java) для событий. Google java listeners для примеров. –

ответ

1

Я собираюсь сделать это быстро и грязно. К сожалению, на Java вам придется писать больше кода для получения тех же результатов.

Я разделить код на 3 секции:

  • интерфейс, какой вид напоминает delegate декларацию
  • class A который содержит event декларацию, подписную логику и повышения логических
  • class B, который является «участник событий» и который объявляет обработчик события

Удачи !

// this is what you used to have as a delegate declaration { 
public interface IWorkCompletedListener { 
    public void someMethodName(Object sender, Object args); 
} 
// } 

// class A will be the event provider 
public class A { 

    // this is what you used to have for an event declaration { 
    // used for the storage of listeners 
    private static Vector<IWorkCompletedListener> workComplete = new Vector<IWorkCompletedListener>(); 

    // used for += 
    public static void addWorkCompleteListener(IWorkCompleteListener listener) { 
     A.workComplete.add(listener); 
    } 
    // used for -= 
    public static void removeWorkCompleteListener(IWorkCompleteListener listener) { 
     A.workComplete.remove(listener); 
    } 
    // } 

    // this is what you would use to raise the event { 
    private static void raiseWorkCompletedListener(Object sender, Object args) { 
     for (IWorkCompletedListener listener : A.workComplete) 
      listener.someMethodName(sender, args); 
    } 
    // } 

    // and the test code 
    public static void doWork() { 
     // Stuff goes here 
     A.raiseWorkCompletedListener(null, null); 
    } 

} 

// class B will be the event consumer 
public class B { 

    public static void subscribeAndCallDoWork() { 
     // this is what += used to be 
     A.addWorkCompleteListener(new IWorkCompletedListener { 
      public void someMethodName(Object sender, Object args) { 

       // I didn't want to force class B to implement the interface 
       // hence I used an anonymous interface implementation 
       // from which I'm calling the "event handler" 
       B.onWorkCompleted(sender, args); 

      } 
     }); 

     A.doWork(); 
    } 

    private static onWorkCompleted(Object sender, Object args) { 
     // expect to be called here 
    } 

} 
+0

спасибо, ,, золотой код :) –

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