私は Java を学んでいますが、この質問は言語固有のものではないと思います。誰かが既に質問をしている場合は申し訳ありませんが、検索クエリでこれをどのように表現すればよいかわかりません。
自分でいくつかのジェネリック メソッドを実装した直後に、次のことに気付きました。私が思いついた「ハック」は、インターフェイスを上限として使用してパラメーターの入力タイプを制限することです。compareTo() のような一般的な機能については、インターフェイス Comparable が十分に普及しているため問題ありませんが、ジェネリックを機能させるためだけにカスタム インターフェイスを作成する必要があるのは面倒です。
私のナンセンスを理解するのに役立つコードを次に示します。ジェネリック データ型のコレクション内の一意の要素をカウントしようとする、次の動作しないコードを考えてみましょう。
public static <T> int countUnique(Collection<T> c) {
int count = 0;
for(T t : c) {
count += (t.isUnique()) ? (1) : (0);
}
return count;
}
t
オブジェクトに method がない (またはコンパイラがオブジェクトにあると判断できない) とコンパイラが不平を言うと、明らかな問題が発生しますisUnique()
。私の解決策:
public interface unique {
public boolean isUnique();
}
public static <T extends unique> int countUnique(Collection<T> c) {
int count = 0;
for(T t : c) {
count += (t.isUnique()) ? (1) : (0);
}
return count;
}
質問: 毎回これを行う必要がありますか? ダサくない?代わりに採用すべき標準的な慣行はありますか?