Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9でサブスクライバーインターフェイスを実装するにはどうすればよいですか?


Java 9 リアクティブストリームの作成をサポート いくつかのインターフェースを導入することによって:パブリッシャーサブスクライバーサブスクリプション 、および SubmissionPublisher パブリッシャーを実装するクラス インターフェース。各インターフェースは、リアクティブの原則に対応する異なる役割を果たすことができます ストリーム

サブスクライバーを使用できます 発行者によって発行されているデータをサブスクライブするためのインターフェース 。 サブスクライバーを実装する必要があります インターフェイスを作成し、抽象メソッドの実装を提供します。

Flow.Subscriberインターフェースメソッド:
  • onComplete(): このメソッドは、Publisherオブジェクトがその役割を完了したときに呼び出されました。
  • onError(): このメソッドは、パブリッシャーで問題が発生したときに呼び出され、サブスクライバーに通知されます。
  • onNext(): このメソッドは、パブリッシャーがすべてのサブスクライバーに通知する新しい情報を持っているときに呼び出されます。
  • onSubscribe(): このメソッドは、パブリッシャーがサブスクライバーを追加するときに呼び出されました。

import java.util.concurrent.Flow;
import java.util.concurrent.SubmissionPublisher;
import java.util.stream.IntStream;

public class SubscriberImplTest {
   public static class Subscriber implements Flow.Subscriber<Integer> {
      private Flow.Subscription subscription;
      private boolean isDone;
      
      @Override
      public void onSubscribe(Flow.Subscription subscription) {
         System.out.println("Subscribed");
         this.subscription = subscription;
         this.subscription.request(1);
      }
      @Override
      public void onNext(Integer item) {
         System.out.println("Processing " + item);
         this.subscription.request(1);
      }
      @Override
      public void onError(Throwable throwable) {
         throwable.printStackTrace();
      }
      @Override
      public void onComplete() {
         System.out.println("Processing done");
         isDone = true;
      }
   }
   public static void main(String args[]) throws InterruptedException {
      SubmissionPublisher<Integer> publisher = new SubmissionPublisher<>();
      Subscriber subscriber = new Subscriber();
      publisher.subscribe(subscriber);
      IntStream intData = IntStream.rangeClosed(1, 10);
      intData.forEach(publisher::submit);
      publisher.close();
      while(!subscriber.isDone) {
         Thread.sleep(10);
      }
      System.out.println("Done");
   }
}
出力
Subscribed
Processing 1
Processing 2
Processing 3
Processing 4
Processing 5
Processing 6
Processing 7
Processing 8
Processing 9
Processing 10
Processing done
Done

  1. JavaでJPanelのpaintComponent()メソッドを実装するにはどうすればよいですか?

    JPanel は軽量のコンテナであり、見えない コンポーネント Javaで。 JPanelのデフォルトのレイアウトはFlowLayout 。 JPanelを作成したら、他のコンポーネントを JPanelに追加できます。 add()を呼び出してオブジェクトを作成します コンテナから継承されたメソッド クラス。 paintComponent() このメソッドは、 JPanelで何かを描画するために必要です 背景色を描く以外。このメソッドは、 JPanelにすでに存在します スーパーを使用する必要があるようにクラス このメソッドに何かを追加し、グラフィックスを取る宣言 オブジェクト パラメータ

  2. JavaでJToggleButtonを実装するにはどうすればよいですか?

    JToggleButton JToggleButton AbstractButtonの拡張です また、オンに切り替えることができるボタンを表すために使用できます。 およびオフ 。 JToggleButtonの場合 を初めて押すと、押したままになり、2回押すと離すことができます。 JToggleButton ActionEventを生成します 押すたびに。 JToggleButton ItemEventを生成することもできます 、このイベントは、選択の概念をサポートするコンポーネントによって使用されます。 JToggleButtonの場合 を押すと選択されます。