逆引きマニュアル: Java: 自分で作成したクラスで拡張forを使用する方法

投稿日:

やりたいこと

Javaで、自分で作成したクラスで、拡張forを使用するための方法です。 DDDにおける集約としてリストを中に含むクラスを作成する場合などに便利です。

前提条件

Java SE 5以上です。 例はJava SE 8で書かれています。

概要

java.lang.Iterableインタフェースを実装します。

手順

例として、Bookクラスと、その集約を表したBooksクラス、 そして利用するためのMainクラスによる実装を記載します。

まずはBookクラス。

package com.ikemo3.example;

import java.util.Objects;

public final class Book {
    private final String bookName;

    public Book(String bookName) {
        this.bookName = bookName;
    }

    public static Book of(String bookName) {
        Objects.requireNonNull(bookName);

        return new Book(bookName);
    }

    public String getName() {
        return this.bookName;
    }
}

Booksクラス。

package com.ikemo3.example;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public final class Books implements Iterable<Book> {
    private final List<Book> books;

    public Books() {
        this.books = new ArrayList<>();
    }

    public void add(Book book) {
        this.books.add(book);
    }

    @Override
    public Iterator<Book> iterator() {
        return books.iterator();
    }
}

最後にMainクラス。

package com.ikemo3.example;

public final class Main {
    public static void main(String[] args) {
        Books books = new Books();
        books.add(Book.of("断絶の時代"));
        books.add(Book.of("Cooking for Geeks"));
        books.add(Book.of("Effective Java"));

        for (Book book : books) {
            System.out.println(book.getName());
        }
    }
}

補足

マニュアル