率直に言って、私はジェネリックの第一人者には程遠いので、いくつかのコードをリファクタリングする必要があります。クラスD、クラスR、クラスSの 3 つのサブクラスがあります。これらの各クラスは、クラスAbstractAを拡張します。サブクラスの目的は非常に似ており、それぞれがメソッドm()に似たようなコードを持っています。したがって、サブクラスからメソッド m() を抽出し、それを 1 レベル上に (AbstractA クラスに) 置き換えることができれば、悪くないと思いました。
ただし、いくつかの違いがあります。
クラス D は次のものと連携します。
Map<String, Map<BigInteger, BigInteger>> counts = new HashMap<String, Map<BigInteger,BigInteger>>();
Map<String, Map<BigDecimal, Set<BigInteger>>> sums = new HashMap<String, Map<BigDecimal, Set<BigInteger>>>();
クラスRは以下で動作します:
Map<String, Map<String, BigInteger>> counts = new HashMap<String, Map<String,BigInteger>>();
Map<String, Map<BigDecimal, Set<String>>> sums = new HashMap<String, Map<BigDecimal, Set<String>>>();
クラス S は次のように動作します。
Map<String, Map<BigInteger, BigInteger>> counts = new HashMap<String, Map<BigInteger,BigInteger>>();
Map<String, Map<BigDecimal, BigInteger>> sums = new HashMap<String, Map<BigDecimal, BigInteger>>();
上記のジェネリックの可能な変更に関するヒントは大歓迎です。これにより、より「ジェネリック」なバージョンが作成される可能性があります(クラス AbstractA に移動でき、3 つのサブクラスで引き続き使用できます)。