私は人工ニューラルネットワークをシミュレートするプログラムを作成しています。私は、次のクラスおよびインタフェースは、設定している:ArrayList <subtype>をArrayListに変換できません<type>
public interface Neuron
{
}
// Input neuron
public class INeuron implements Neuron
{
}
// Output and hidden neuron
public class ONeuron implements Neuron
{
}
public interface Layer
{
public ArrayList<Neuron> getNeurons();
}
// Input layer
public class ILayer implements Layer
{
ArrayList<INeuron> neurons = new ArrayList<INeuron>();
public ArrayList<Neuron> getNeurons()
{
return neurons;
}
// other stuff appropriate to the input layer
}
コンパイラのレポートは、「<ニューロン>をArrayListにArrayListの<INeuron>から変換することはできません。」
私は物事を切り替えることを試みました。たとえば、ArrayList<Neuron> neurons = new ArrayList<INeuron>()
です。しかし、それはクラスの異なる部分に同じエラーをシフトするようです。
INeuronがNeuronのサブタイプであるため、なぜINeuronが暗黙的にNeuronにキャストできないのか分かりません。
public interface Layer
{
public ArrayList<? extends Neuron> getNeurons();
}
ためジェネリック医薬品における共変性と反変性の不足のため:
正しい解決策は、返されたリストの意図された用途が何であるかによって変わります。 'Generic'は正当な理由で 'Generic 'ではありません。 –
trutheality