Java 在allocateCapacity/deallocateCapacity期间引发InvalidCapacity和InvalidState异常
我在Redhawk前端接口的文档中看到,调用allocateCapacity()和deallocateCapacity()意味着在相应操作失败时引发某些异常。然而,Redhawk 1.9中当前的代码生成(从外观上看,在当前的开发中)表明,开发人员应该使用通过分配器对象对分配属性调用setAllocator()的范例。分配器接口如下所示:Java 在allocateCapacity/deallocateCapacity期间引发InvalidCapacity和InvalidState异常,java,device,redhawksdr,Java,Device,Redhawksdr,我在Redhawk前端接口的文档中看到,调用allocateCapacity()和deallocateCapacity()意味着在相应操作失败时引发某些异常。然而,Redhawk 1.9中当前的代码生成(从外观上看,在当前的开发中)表明,开发人员应该使用通过分配器对象对分配属性调用setAllocator()的范例。分配器接口如下所示: public interface Allocator<E> { public boolean allocate(E capacity);
public interface Allocator<E> {
public boolean allocate(E capacity);
public void deallocate(E capacity);
}
公共接口分配器{
公共布尔分配(E容量);
公共无效解除分配(E容量);
}
这些方法不会抛出(选中的)异常类型InvalidCapacity和InvalidState。我本来希望能够在tuner allocation struct属性的allocate()和deallocate的实现过程中抛出这些函数,并让它们传播到allocateCapacity()deallocateCapacity()调用,但分配器接口上缺少@throws语句阻止了我这样做
我的问题是:
2.a。如果不鼓励抛出这些,是否有任何标准的方法表明解除分配失败
我正在RHEL 5上使用Redhawk 1.9.0进行开发。是的,通常分配器接口是实现分配的首选方法。在大多数情况下,设备基类将为您处理抛出InvalidState和InvalidCapacity异常。但是,它假定为通用设备,在前端规范中有几个地方,您打算抛出无法在基类级别检查的异常,例如分配ID是否有效。不幸的是,由于InvalidState和InvalidCapacity是检查方法,因此无法通过分配器接口直接执行此操作 围绕这一限制,我可以想到两种方法:
- allocate()将IllegalArgumentException转换为CF.Device.InvalidCapacity
- deallocate()将算术异常和IllegalArgumentException转换为CF.Device.InvalidCapacity
在1.9之前,你必须做#1,所以这不是一个坏方法。#2的问题在于它是一种黑客行为,使用IllegalArgumentException将丢失异常的消息。谢谢,贾斯汀。你知道这是否也是红鹰未来版本的计划吗?