Javaでのレコードの使用

UnsplashのNamroudGorguisによる写真

Aレコードデータが格納されている以上のクラスのタイプよりも何もありません。これはJavaBeanと同じ構造のアイデアであり、コンストラクター、属性、およびアクセサーメソッドがあります。ただし、変更を許可する代わりに、クラスは不変です。また、equals、hashCode、およびtoString()メソッドもあります。

レコードを使用するときに考慮すべきいくつかの良い利点:

  • ボイラープレートコードの記述を減らす
  • Lombokなど、この作業を行うライブラリの必要性を排除します
  • 不変性

名前とパスワードを属性として持つクラスがあるUserとします。この実装が必要になります。

import java.util.Objects;

public class User {

    private String name;

    private String password;

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return name.equals(user.name) &&   password.equals(user.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, password);
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

public record User(String name, String password){}

User user = new User("admin", "45454*aa");

String name = user.name();

レコードを使用するいくつかの可能性の中で、1つのユーティリティは、DTOとも呼ばれる通信ペイロードを表すクラスをシリアル化および逆シリアル化することです。

バージョン2.13.0でJacksonをテストすると、特定の構成なしでこの機能を使用することがすでに可能です。

@Test
void shouldDeserializeCorrectly() throws Exception {
    String json =
            """
                {
                    "name": "willyancaetano",
                    "password": "jK%onD2B2Pvt"
                }
            """;

    User user = objectMapper.readValue(json, User.class);
    assertEquals("willyancaetano", user.name());
    assertEquals("jK%onD2B2Pvt", user.password());

}

@Test
void shouldSerializeCorrectly() throws Exception {

    User user = new User("admin", "$JJMwSYskkN^");

    String json = objectMapper.writeValueAsString(user);

    assertTrue(json.contains("admin"));
    assertTrue(json.contains("$JJMwSYskkN^"));
}

次のような他のシナリオでレコードを使用する可能性があります。

  • データベースレコードまたはその他のデータプロバイダーからの参照:データベースからフェッチされたレコードはレコードである可能性があると考えてください
  • 非同期通信の送受信メッセージ

参照:

  • https://docs.oracle.com/en/java/javase/14/language/records.html
  • https://www.infoq.com/br/articles/records-no-java-14/
  • https://en.wikipedia.org/wiki/Plain_old_Java_object
  • https://pt.wikipedia.org/wiki/Plain_Old_Java_Objects
  • https://www.baeldung.com/java-dto-pattern

提案された投稿

ドメイン名に関する情報の検索

Brian P. Hogan 著『Small, Sharp Software Tools』からの抜粋

ドメイン名に関する情報の検索

facebook.com にリクエストを送信すると、コンピュータはドメイン名を検索してそのドメイン名を IP アドレスに変換し、コンピュータが接続できるようにします。

Spring Boot での Apache Kafka の構成と使用

スプリングブーツを履いたカフカ

Spring Boot での Apache Kafka の構成と使用

はじめに Apache Kafka は、大規模で高スループット、フォールトトレラントなリアルタイム データ ストリーミングを処理するオープンソースの分散ストリーミング プラットフォームです。このシステムは、プロデューサーがトピックにメッセージをパブリッシュし、コンシューマーがそれらのトピックをサブスクライブしてメッセージを消費するパブリッシュ/サブスクライブ モデルに基づいています。

関連記事

「マリアナ海溝の公開: 深淵の恐るべき隠された真実を明らかにする」

「マリアナ海溝の公開: 深淵の恐るべき隠された真実を明らかにする」

はじめに:勇敢な読者の皆さん、地球の最も暗い深みへ私たちを導く旅へようこそ。このブログでは、マリアナ海溝の謎に満ちた世界を掘り下げ、その隠された秘密を明らかにし、その表面の下にある骨も凍るような真実を明らかにします。

キリスト教徒の迫害: 私たちが語らないヘイトクライム

イスラム嫌悪のことは忘れてください。宗教的憎悪犯罪の主な犠牲者はキリスト教徒(そしてユダヤ人)です。

キリスト教徒の迫害: 私たちが語らないヘイトクライム

理性的な人なら誰でも、政界とメディア界が左派、さらには極左によって支配されており、政治的言説に不均衡を生み出している状況を知っています。宗教の分野では、この不均衡は明らかです。左翼の新聞やネットワークは急いでキリスト教の信仰を擁護していません。

待ちの季節にできること(テクノロジー業界での最初の仕事に就くのを待っているとき)

待ちの季節にできること(テクノロジー業界での最初の仕事に就くのを待っているとき)

新しいキャリアへの転職は、一人でやろうとすると非常に困難になる可能性があります。あなたと同じ学習レベルにあり、同様の目標、粘り強さ、意欲を共有する責任パートナーを見つけることが重要です。

アートは政治的ではないのでしょうか?

アートは政治的ではないのでしょうか?

昨日、私たちは今年のユーロビジョン・ソング・コンテストの幕を閉じました。きらびやかでカオスなグランドフィナーレでスウェーデンの歌手ローリーンがトロフィーを持ち帰り、女性として初めて2回優勝し、ABBAがコンテストで優勝してから50年目にその栄冠をスウェーデンに持ち帰りました。 「ワーテルロー」で。彼らはポップ ミュージックの規範において最大のアーティストの 1 つになりました。