覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

Java

Kotlin - オブジェクト式

Kotlin の object キーワードは、無名オブジェクト(anonymous object)の宣言のためにも使用できます。 無名オブジェクト は Javaにおける無名内部クラスを置き換えるものとなります。 Javaで無名内部クラスの典型的な利用シーンというと、イベントリストが…

Kotolin - コンパニオンオブジェクト 2

Kotlin のコンパニオンオブジェクトは、クラス内に宣言された通常のオブジェクトであり、 名前を付けたり、インターフェースを実装したり、拡張関数やプロパティを持つこともできます。 コンパニオンオブジェクトに名前を付ける 前回のエントリですでにやっ…

Kotlin - コンパニオンオブジェクト

Javaと異なり Kotlin のクラスは静的なメンバを持つことができません。Javaにおける static キーワードは Kotlin には含まれていません。 この Java における static の代替手段として以下を利用します。 トップレベル関数関数 多くの状況で Java の static…

Kotlin - シングルトン

Java でプログラムを書いている場合に、対象クラスのインスタンスがただ1つだけ存在する状態にしたい場合があります。 そういった場合には、一般的に Singleton パターン(シングルトン・パターン) というデザインパターンを用いてクラスを宣言する事になり…

Kotlin - 移譲

Java(オブジェクト指向言語)を用いて大規模なシステムを設計・開発した場合に、実装の継承 によってシステムが壊れていくことが多々あります。 共通化という名目(DRYの達成)のために、実装クラスを継承してしまっていると、 クラスを拡張し、いくつかの…

Kotlin - データクラス

前回エントリで データを保持するクラスの toString, equals, hashCode のオーバーライドにいて簡単に書きました。 これらの実装は、Intellij IDEA などのIDEを使う事で簡単に自動生成することが可能です。 Kotlin では、データクラスを利用することで、これ…

Kotlin - toString, equals, hashCode

Java で以下データを保持するクラスを定義する場合、以下のようになります。 public class Person { private final String name; private final int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName…

Kotlin - getter/setter からのバッキングフィールドへのアクセス

Kotlin のクラスでは、フィールドを持つことができません。 しかし、カスタムアクセサを使用するときに バッキングフィールド が必要になることがあります。 この目的のために、Kotlinでは field という識別子を使用して自動的に作成されたバッキングフィー…

Kotlin - インターフェースで宣言したプロパティの実装

Kotlin ではインターフェースに抽象的なプロパティをを宣言する事が可能です。 例えば以下のようなものです。 interface Cat { val kind: String } Cat インターフェースを実装するクラスにおいて、kind の値を取得する手段を提供しなければならないという意…

Kotlin - コンストラクタ

今日も相変わらず 「Kotlinイン・アクション」 を読みながらの写経です。 Kotlinイン・アクション作者: Dmitry Jemerov,Svetlana Isakova,長澤太郎,藤原聖,山本純平,yy_yank出版社/メーカー: マイナビ出版発売日: 2017/10/31メディア: 単行本(ソフトカバー…

Kotlin - シールドクラス

明示していない場合も少なくないですが、現時点で私が書いているKotlinのエントリは、ほぼ 「Kotlinイン・アクション」 を読みながらの写経です。 Kotlinイン・アクション作者: Dmitry Jemerov,Svetlana Isakova,長澤太郎,藤原聖,山本純平,yy_yank出版社/メ…

Kotlin - 内部クラスとネストされたクラス

Java では クラスの中にクラスを宣言する事が可能です。 あるクラスの一部機能を切り出して、クラス化してその外側のクラスからしか利用しない といったケースで使う事があります。 例えば以下のように記述できます。 public class Sample { private final S…

Kotlin - 可視性

可視性のデフォルトはpublic Kotlin の可視性修飾子はJavaと似ていて、public, protected, preivate の修飾子 を持っています。 しかし、デフォルトの可視性(修飾子の指定を省略した場合の可視性)が、Kotlin では public になっています。 class Dog(val n…

Kotlin - 継承

Javaのクラスでは明示的に final キーワードを付与しない限り、どのようなクラスからでもそのサブクラスを継承して作成可能です。 メソッドもオーバーライドできます。 ◾️簡単に継承できるというサンプル public class Person { protected final String name…

Kotlin - インターフェース

Java で インターフェースの定義をするコードは以下のようになります。 public interface Printable { void print(); void printDetail(); } そしてこのインターフェースを実装した実装クラスのコードは以下のようになります public class JavaPrinter imple…

Kotlin - トリプルクォート文字列

現在のJavaにはなくてKotlinにはあるものの一つに トリプルクォート文字列(triple-quoted string) があります。 固定文字列は、"(ダブルクォート)で囲って記述しますが、 この際に、その文字列内に ダブルクォート を入れたり 改行を入れたりしようとす…

Kotlin - 文字列の分割

Java で 文字列分割する時は、 String クラスの split メソッドを利用することになります。 分割した文字列を配列にして返してくれます。 例えば、"100-123-A500-10" という文字列があったとして、"-" で区切りたいと思った時は以下のようになります String …

Kotlin - 可変長引数を扱う

Javaのメソッドで可変長引数を扱う場合は、 <型>... 仮引数名 という記述で引数の部分を記述します。 例えば、与えられた可変長の文字列群をList化して出力するメソッドなら以下の様になります。 import java.util.Arrays; void convToListAndPrint(String..…

Kotlin - 静的なユーティリティクラスなしで関数を定義する

Javaの場合、メソッドは必ずクラスに属する必要があります。 対象のクラスの操作を提供するという意味ではこの形は良いものであると思います。 ただし、業務アプリケーションなどを作成していくうちに、どうしても特定のクラスに属さないユーティリ的なメソ…

Java 8 での java.nio.Files#existsは遅いのか?

Java 7で導入されたNew I/O API(NIO2)。その時に新規クラスとして、java.nio.Files などが増えました。 このクラスで、java.io.File のコードを置き換えることなどが可能です。 今はjava.io.Fileクラスではなく、NIO2の機能(java.nio.Filesクラス)を使うの…

HomeBrew で AdoptOpenJDK 11をインストールしてみる

macOSにJava 11をインストールしたかったので、HomeBrewでインストールしてみました。 ちなみにインストールしたのは、AdoptOpenJDK です。 Java 11 (AdoptOpenJDK)のインストール 以下実行して AdoptOpenJDKをインストールします $ brew cask install ado…

例外のスタックトレースが出力されなくなる

Javaアプリケーションを実行していると、ずっと出力できていた例外(Exception)のスタックトレース(StakTrace)が出力されなくなる場合があります。 気づいてみたら、あれ?ログに例外のスタックトレースが出ていない! というような状況に出くわすことが…

Javaで外部プロセスを実行する

Java8以上の世の中だと思いますので、外部プロセスを実行する場合はProcessBuilderクラスを使いましょう。 今回は、外部プロセスが出力する標準出力や標準エラー出力の内容は無視して、終了コードだけを取得する例となっています。 Javaで?外部プロセスを実…

Gson で JSONICの簡単なアダプタを作る

JavaでもJSONを扱わなければならなくなった初期の頃に、JSONICというライブラリのお世話になった方も少なく無いのでは無いでしょうか? 今となっては、jackson や Gson 等の他のライブラリを使うのが一般的になっています。 JSONICのページにも以下のように…

Gson - JsonWriterでインデント形式を変えてファイル出力してみる

以前JSON形式のデータをJavaで扱うためのGsonライブラリについて使い方を紹介しました。 今回はGsonライブラリのGsonオブジェクトを使わずにJSONファイルへの出力を行ってみます。 その際にインデントの形式をいくつか変えて出力します。 今回出力するJSONフ…

Java 11リリースに関するメモ

先日、Java 11が正式リリースされました。 ご存知の通りですが、本バージョンからOracle JDKが有償となりました。 その辺についての自分用のメモです。(不正確だったり間違っている内容もあるかもしれません) 概要 Java 11リリースに関連する内容は以下の…

FailSafeによるサーキットブレーカーパターン

クラウド、マイクロサービスなどのアーキテクチャとともにサーキットブレーカーというパターンがよく取り上げられます。 詳細は、上記リンク先などを参照していただくのがよいです。 超大雑把にいうと、クラウドのサービスなどを利用する際に、 クライアント…

Failsafeによるリトライ処理 (3)

前回エントリで、FailSafeによるリトライ方法の制御をいくつか紹介しました。 今回のエントリでは、処理失敗時やリトライ処理実行時のハンドリングなどを紹介します。 基本となるリトライポリシーとリトライ処理を以下とします リトライポリシー RetryPolicy…

Failsafeによるリトライ処理 (2)

前回エントリで FailSafe によるリトライ処理について書きました。 FailSafeは前回書いた内容よりももっと色々制御できるので、それらを紹介する内容のエントリになります。 基本的には上記の前回エントリの内容がベースにあります。 前回エントリでは、基本…

Failsafeによるリトライ処理

業務系プログラムにおいて、リトライ処理は必須だと思いますが、 Javaで単純にリトライ処理を書こうとすると、泥臭い感じのプログラムになってしまいます。 FailSafeというライブラリを利用することで、リトライ処理を整理した形で記述することが可能です。 …