このように定義されたリストで add() を実行する際に問題があります
private final List<TraitGroup <? extends TRAIT_Able>> traitGroups;
理想的には、単純にしたいtraitGroups.add(TYPE);
しかし、できる限り試してみてください。ジェネリックを完全に正しく取得することはできません。
リクエストに応じて、Trait_Able インターフェイスと TraitGroup クラスは以下のとおりです...
TRAIT_Able
public interface TRAIT_Able {
String getNAME();
String toString();
}
特性グループ
@SuppressWarnings("unchecked")
public class TraitGroup <T extends TRAIT_Able>{
private final List <AbstractTrait<T>> abstractTraits;
public TraitGroup() {
abstractTraits = new LinkedList<AbstractTrait<T>>();
}
public AbstractTrait<T>[] toArray() {
AbstractTrait<T>[] abstractTrait = new AbstractTrait[this.abstractTraits.size()];
for (int i =0; i < abstractTrait.length; i ++)
abstractTrait[i] = this.abstractTraits.get(i);
return abstractTrait;
}
public void add(AbstractTrait<T>... source)
{
boolean wasFound;
for (AbstractTrait<T> abstractTrait : source)
{
wasFound = false;
for (AbstractTrait<T> trait : this.abstractTraits)
{
if (abstractTrait.equals(trait))
{
wasFound = true;
trait.add(abstractTrait);
break;
}
}
if (!wasFound)
this.abstractTraits.add(abstractTrait);
}
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append( "Trait group: " +
" Size: " + this.abstractTraits.size() + "\n");
return sb.toString();
}
}