今日の私の質問は、問題解決の質問ではなく、ベスト プラクティスの理論に関する質問です。Joda-Time に慣れてきました。ユーザー ガイド ( http://joda-time.sourceforge.net/userguide.html#Interface_usage )でこれを読みました。
List や Map などの Collections インターフェースを使用する場合、通常は変数を List または Map の型として保持し、オブジェクトの作成時に具象クラスのみを参照します。
List list = new ArrayList(); Map map = new HashMap();
これは非常に奇妙な発言だと思いました。私のプログラミングでは、ある種の API をプログラミングしていない限り、常に変数の具象クラスを保持してきました。変数型の具体的なクラスに対して一般/抽象クラスを保持することが優先される理由を説明するのに役立つ資料はありますか?
説明のために、コンマで区切られた文字列としてオブジェクトのリストが必要なときに使用する簡単なメソッドを作成しました。
public static <T> String CSV(Collection<T> list) {
boolean first = true;
StringBuilder sb = new StringBuilder();
for(Object e : list) {
if(first)
first = false;
else
sb.append(", ");
sb.append(e.toString());
}
return sb.toString();
}
ここではもちろん、Object[]、LinkedList など、必要なものを何でも渡すことができるように Collection を使用する必要があります。
しかし、別の場所に文字列のセットを格納していて、それを LinkedHashSet にしたい場合、次のように変数を作成します。
LinkedHashSet<String> set = new LinkedHashSet<String>();
また
LinkedHashSet<String> set = new LinkedHashSet<>();
(Java 7 の変更のため)
しかし、Joda-Time のユーザー ガイドによると、次のようにする必要があります。
Set<String> set = new LinkedHashSet<String>();
?
メリットしか思い浮かびません。役に立つ入力/読み物を持っている人はいますか?
ありがとう!