【发布时间】:2009-07-15 21:47:37
【问题描述】:
所以我只花了大约一个小时试图揭开并解决一个非常奇怪的错误,这是我以前从未见过的。
我或多或少地询问这种从枚举到字符串的随机转换的潜在原因,而不是“请为我修复我的代码”。
问题的要点如下:
我有一个接口,叫它IFoo,在这个接口里面,它有一个静态枚举,叫Bar:
public interface IFoo {
static enum Bar{
A,
B,
C,
}
Bar doGetBar();
}
我当然有一个实现IFoo 的Foo 类。
public class Foo implements IFoo{
public Bar getBar(){
return Bar.A; // for example
}
}
在其他地方,我有一个名为
的对象数组Object[] result;
还有一个辅助方法,它返回Objects 的数组,保存getBar()方法的结果,调用它
public Object[] getBars()
现在,当我这样做时
result = getBars();
result 神奇地持有Strings 而不是Bars,字符串的值是Bar 的外部类(不是真正的外部类,更像是一个包装类?)的实现类,即“Foo”。
有人可以向我解释这怎么可能吗?
一些线索:
1.结果是在分配之前保持字符串。
2. IFoo 中的静态枚举是有问题的,它是非静态的,但是当我尝试将它从 Foo.Bar (或类似的东西)强制转换为 IFoo.Bar 时,它导致了ClassCastExceptions。
【问题讨论】:
-
您需要发布一段我们可以查看的实际工作代码
-
如果我不能这样做,我应该关闭线程吗?
-
为什么不可能?
-
我不是要你重现整个代码库 :-) 只需编写一个像上面这样的小程序来演示错误并且只显示错误。毕竟,您似乎在问“我编写的某些代码中有错误但无法显示给您”。有人应该如何提供帮助?
-
不可能通过查看完全不同(且不一致)的代码来诊断问题,而您认为包含导致实际出现这种奇怪行为的原因的本质代码。要么发布实际代码,要么尝试在一个最小示例中重现问题 - 您可能会在构建该示例时发现潜在问题。