ライブラリがデータベースのような呼び出しを行っているようです。その場合は、JPA2仕様で実装されていることを正確に実行します。
つまり、 JPA APIのfind()
メソッドを見て、そこで行っていることを正確に返します。
/**
* Find by primary key.
* @param entityClass
* @param primaryKey
* @return the found entity instance or null
* if the entity does not exist
* @throws IllegalStateException if this EntityManager has been closed.
* @throws IllegalArgumentException if the first argument does
* not denote an entity type or the second
* argument is not a valid type for that
* entity's primary key
*/
public <T> T find(Class<T> entityClass, Object primaryKey);
ここにあるのはあなたのメソッドにfind
似ていると思いますが、何も見つからない場合は返され、引数が無効な場合にのみスローされます。getCustomer()
null
IllegalArgumentException
find()
メソッドが目的に近づかない場合は、 getSingleResult()getCustomer()
と同じ動作を実装する必要があります。
/**
* Execute a SELECT query that returns a single result.
* @return the result
* @throws EntityNotFoundException if there is no result
* @throws NonUniqueResultException if more than one result
* @throws IllegalStateException if called for a Java
* Persistence query language UPDATE or DELETE statement
*/
public Object getSingleResult();
EntityNotFoundException
結果が見つからないNonUniqueResultException
場合、複数のインスタンスが見つかっIllegalStateException
た場合、またはSQLが間違っている場合にスローされます。
どの動作が自分に最も適しているかを判断する必要があります。
getResultList()についても同じことが言えます。
/**
* Execute a SELECT query and return the query results
* as a List.
* @return a list of the results
* @throws IllegalStateException if called for a Java
* Persistence query language UPDATE or DELETE statement
*/
public List getResultList();
getResultList()
何も見つからない場合はnullを返し、SQLが不正な場合にのみ例外をスローします。
この動作に従うことで、一貫性が保たれ、ユーザーはライブラリがどのようになっているのかを知ることができます。
別の動作は、の代わりに空のコレクションを返すことですnull
。これがGoogleGuavaがAPIを実装した方法であり、これが本当に好ましい理由です。しかし、私は一貫性が好きであり、それでもライブラリをstandard
できるだけ近くに実装する必要があると思います。
資力
Joshua Blochは、優れたAPIを設計する方法とそれが重要である理由を説明するビデオを作成しました。