我试图用一些凌乱的技巧来携带一个IMarker
ProblemDescriptor
个对象。
ProblemDescriptor problem = new ProblemDescriptor(... my arguments...);
marker.setAttribute("PROBLEM_DESCRIPTOR", problem);
稍后我想检查属性是否已设置,请使用其中的信息。
开发时未报告错误,但在运行时我收到错误:
The attribute value type is com.localhost.problems.ProblemDescription and expected is one of java.lang.String, Boolean, Integer
这是一个特殊情况/该代码中的错误实现还是我应该使用仅在运行时报告的那种错误?
答案 0 :(得分:1)
您使用的setAttribute
方法是
public void setAttribute(String attributeName, Object value)
由于第二个参数是Object
,因此无法在编译时检查是否正确,但是Javadoc清楚地说明了这一点:
使用给定名称设置属性。该值必须为null或 以下类之一的实例:String,Integer或Boolean。 如果该值为null,则认为该属性未定义。
属性值不能是UTF编码超过65535的String 字节。在持久性标记上,此限制由断言强制执行。
替代设计可能是使用String
,Integer
和Boolean
第二个参数替换3个方法,但API设计者决定不这样做。
答案 1 :(得分:0)
确保正确调用您的方法。该错误看起来像是在传递
com.localhost.problems.ProblemDescription
对于期待别的东西的方法。
...省略论据没有帮助