2016-01-18 2 views
0

Привет Я получаю это Java ArrayStoreException, когда я пытаюсь сохранить класс, который реализует интерфейс в массив, который определяется как массив интерфейсов. Вот код:Java ArrayStoreException при хранении интерфейса реализации класса

private Individual[] individuals; 
/* 
* other fields and methods here 
*/ 

//This method runs alright 
public void initializePopulationBinary() { 
    for(int i = 0; i < sizeOfPopulation; i++) { 
     BinaryIndividual individual = new BinaryIndividual(); 
     individual.generateRandomIndividual(); 
     this.individuals[i] = individual; 
    } 
} 
//This methods throws exception 
public void initializePopulationString() { 
    for(int i = 0; i < sizeOfPopulation; i++) { 
     StringIndividual individual = new StringIndividual(); 
     individual.generateRandomIndividual(); 
     this.individuals[i] = individual; 
    } 
} 

индивидуал интерфейс, что оба класса BinaryIndividual и StringIndividual реализации. В чем проблема?

+0

Показать нам полную трассировку стеки исключения, код из три класса и код, который создает массив. –

+3

Вероятный экземпляр 'Individual []' array был инициализирован как 'new SomeImplementingClass []', поэтому сохранение экземпляров другого класса реализации вызовет 'ArrayStoreException'. Трудно сказать с отображаемым в данный момент кодом. – Mena

+0

Да, вы правы, видите мои другие комментарии. Я действительно инициализировал его как SomeImplementingClass вместо интерфейса. Мой плохой – MichaelDD

ответ

0

Из документации ArrayStoreException:

Брошенный, чтобы указать, что была сделана попытка сохранить неправильный тип объекта в массив объекты.

Я предполагаю, что вы инициализировать individuals где-то вроде этого:

individuals = new BinaryIndividual[someLength]; 

Попытки инициализировать его таким образом: individuals = new Individual[someLength];

+0

О да, моя неудачная так глупая ошибка, я исказил код, изначально изначально использовавший только BinaryIndividuals, и теперь я хочу использовать другой тип людей. Спасибо, мой плохой – MichaelDD

2

Инициализировать ваш массив первой с некоторой длиной:

Individual[] individuals = new Individual[sizeOfPopulation]; 
+0

Да, вы правы, я инициализировал его в конкретных BinaryIndividuals вместо отдельных. Спасибо вам за помощь, ребята, я не заметил свою ошибку, и я был уверен, что было что-то еще неправильное. – MichaelDD

Смежные вопросы