3

人工ニューラル ネットワークをシミュレートするプログラムを作成しています。次のクラスとインターフェースをセットアップしました。

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<INeuron> から ArrayList<Neuron> に変換できません」と報告します。

色々と入れ替えてみました。例: ArrayList<Neuron> neurons = new ArrayList<INeuron>(). しかし、それは同じエラーをクラスの別の部分に移しているように見えます。

INeuron は Neuron のサブタイプであるため、INeuron を暗黙的に Neuron にキャストできない理由がわかりません。

4

4 に答える 4

4

変更するだけです:

ArrayList<INeuron> neurons = new ArrayList<INeuron>();

に:

ArrayList<Neuron> neurons = new ArrayList<Neuron>();

両方のタイプに対応できるようにします。

于 2012-04-12T23:55:14.287 に答える
2

これは起こりうる悪いことの例です。

void mymethod ( ILayer l )
{
     List<Neuron> neurons = l . getNeurons ( ) ;
     neurons . add ( new ONeuron ( ) ) ; // bad thing
}

私のメソッドは、そのリストを non でmymethod汚染しました。ILayerneuronsINeuron

ルチアーノのソリューションをお勧めします。

于 2012-04-12T23:51:22.760 に答える
0
public Layer <?> getNeurons();

これは、サブタイプを記述する別の方法ですよね?

于 2015-12-09T04:46:51.583 に答える