Так что я потратил около часа, пытаясь раскрыть и устранить очень странную ошибку, которую я никогда раньше не видел.
Я более или менее спрашиваю о возможных причинах этого кажущегося случайного приведения из enum в String, а не "пожалуйста, исправьте мой код для меня" .
Суть проблемы заключается в следующем:
У меня есть интерфейс, назовите его IFoo
, в этом интерфейсе он имеет статическое перечисление, называемое Bar
:
public interface IFoo {
static enum Bar{
A,
B,
C,
}
Bar doGetBar();
}
У меня, конечно, есть класс Foo
, который реализует IFoo
.
public class Foo implements IFoo{
public Bar getBar(){
return Bar.A; // for example
}
}
Где-то еще у меня есть массив объектов с именем
Object[] result;
И вспомогательный метод, который возвращает массив Object
с, содержащий результаты метода getBar()
, вызывает его
public Object[] getBars()
Теперь, когда я делаю
result = getBars();
result
магически содержит String
с вместо Bar
с, значения строк являются классом реализации внешнего класса (на самом деле это не внешний класс, а скорее класс-обертка?) Bar
т.е. "Foo".
Может ли кто-нибудь объяснить мне, как это возможно?
Некоторые выводы:
1. результаты держали строки перед назначением.
2. Статическое перечисление внутри IFoo сомнительно, оно было нестатичным, но оно вызвало ClassCastException
s, когда я попытался привести его к IFoo.Bar из Foo.Bar (или что-то в этом роде).