Спасибо все, кто ответил на этот вопрос.
кажется, что это - действительно трудная задача. Я закончил тем, что сдался и создал статический массив и метод считывания в моем базовом классе.
public abstract class Animal{
private static Animal[] animals= null;
public static Animal[] getAnimals(){
if (animals==null){
animals = new Animal[]{
new Dog(),
new Cat(),
new Lion()
};
}
return animals;
}
}
кажется, что Java просто не настраивается для self-discoverability путем, C#. Я предполагаю, что проблема состоит в том, что, так как приложение Java является просто набором .class, выходит друг за другом в каталоге / файл банки где-нибудь, время выполнения не знает о классе, пока на это не ссылаются. В то время загрузчик загружает его - что я пытаюсь сделать, обнаруживают его, прежде чем я сошлюсь на него, который не возможен, не выходя в файловую систему и взгляд.
мне всегда нравится код, который может обнаружить себя вместо меня имеющий необходимость сказать это о себе, но увы это работает также.
Еще раз спасибо!
Yes, Thierry's answer is definitely true I can say as co-author of the 'Matrix' package...
To your other question: Why is accessing "M" slower than "Y"? Основной ответ заключается в том, что «M» намного реже, чем «Y», следовательно, намного меньше и - в зависимости от размеров окружения и оперативной памяти вашей платформы - время доступа быстрее для гораздо меньших объектов, особенно для индексации в них. .
Почему вам нужны значения NA по умолчанию? Насколько мне известно, матрицы разрежены только в том случае, если в них есть нулевые ячейки. Поскольку NA - ненулевое значение, вы теряете все преимущества разреженной матрицы. Классическая матрица еще эффективнее, если в ней почти нет нулей. Классическая матрица похожа на вектор, который будет разрезан по размерам. Таким образом, он должен хранить только вектор данных и размеры. Разреженная матрица хранит только ненулевые значения, но также сохраняет их местоположение. Это преимущество, если и только если у вас достаточно нулевых значений.