gpt4 book ai didi

java - 在 allocateCapacity/deallocateCapacity 期间抛出 InvalidCapacity 和 InvalidState 异常

转载 作者:行者123 更新时间:2023-12-01 12:44:44 24 4
gpt4 key购买 nike

我在 Redhawk 前端接口(interface)的文档中看到 here如果相应的操作不成功,调用 allocateCapacity() 和 deallocateCapacity() 会抛出某些异常。然而,Redhawk 1.9 中当前的代码生成(从目前的开发情况来看)建议开发人员应该使用使用 Allocator 对象对分配属性调用 setAllocator() 的范例。 Allocator接口(interface)如下:

public interface Allocator<E> {
public boolean allocate(E capacity);
public void deallocate(E capacity);
}

这些方法不会抛出(已检查的)异常类型 InvalidCapacity 和 InvalidState。我期望能够在实现调整器分配结构体属性的 allocate() 和 deallocate 期间抛出这些,并让它们传播到 allocateCapacity() deallocateCapacity() 调用,但是 Allocator 接口(interface)上缺少 @throws 语句阻止我这样做。

我的问题是:

  1. 我认为开发人员应该使用 setAllocator() 方法是否正确?
  2. 如果是这样,有没有办法在分配器实现中抛出这些已检查的异常,或者我们是否不鼓励在非生成的代码中抛出这些异常?
    2.a.如果不鼓励抛出这些,是否有任何标准方法来指示释放失败?
  3. 如果不是,我们应该如何实现分配?直接覆盖设备类中的 allocateCapacity() 和 deallocateCapacity() 似乎是一个糟糕的方法。

我正在 RHEL 5 上使用 Redhawk 1.9.0 进行开发。

最佳答案

是的,通常Allocator接口(interface)是实现分配的首选方法。对于大多数情况,Device 基类将为您处理抛出 InvalidState 和 InvalidCapacity 异常。但是,它假定通用设备,并且在 FRONTEND 规范中有几个地方您打算抛出无法在基类级别检查的异常,例如分配 ID 是否有效。不幸的是,由于 InvalidState 和 InvalidCapacity 是检查方法,因此无法直接通过 Allocator 接口(interface)执行此操作。

我可以想到两种方法来解决这个限制:

  1. 实现您自己的 allocateCapacity() 和 deallocateCapacity(),这意味着您必须重新实现基类的所有功能
  2. 在 allocate() 和 deallocate() 中抛出未经检查的异常
    • allocate() 将 IllegalArgumentException 转换为 CF.Device.InvalidCapacity
    • deallocate() 将 ArithmeticException 和 IllegalArgumentException 转换为 CF.Device.InvalidCapacity

在 1.9 之前,无论如何你都必须执行#1,所以这不是一个坏方法。 #2 的问题在于它是一种 hack,使用 IllegalArgumentException 将丢失异常的消息。

关于java - 在 allocateCapacity/deallocateCapacity 期间抛出 InvalidCapacity 和 InvalidState 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24812998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com