加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在Ada(2005或2012)中实现相当于java finalize块的最佳实践

发布时间:2020-12-15 01:00:03 所属栏目:Java 来源:网络整理
导读:Java具有finalize块,允许在块之后执行一些语句 保留(即使引发异常也会执行).例: try { ...} catch (Exception e) { ...} finally { ... // any code here} Ada具有允许实现Finalize操作的受控对象 但是没有与java中相同的finalize块.这对于日志记录非常有用
Java具有finalize块,允许在块之后执行一些语句
保留(即使引发异常也会执行).例:
try {
  ...
} catch (Exception e) {
  ...
} finally {
  ... // any code here
}

Ada具有允许实现Finalize操作的受控对象
但是没有与java中相同的finalize块.这对于日志记录非常有用
关闭文件,事务等(无需为每个可能的块创建特定的标记类型).

>你将如何在Ada 2005中实现这样的终结块(同时保持代码可读)?
> Ada 2012是否有计划允许轻松执行任何终结代码?

解决方法

我相信这段代码会按照你的要求行事;它成功打印出目前加注或返回的42.这是T.E.D建议的实施.

在Mac OS X,Darwin 10.6.0上使用GCC 4.5.0进行测试.

with Ada.Finalization;
package Finally is

   --  Calls Callee on deletion.
   type Caller (Callee : not null access procedure)
      is new Ada.Finalization.Limited_Controlled with private;

private

   type Caller (Callee : not null access procedure)
      is new Ada.Finalization.Limited_Controlled with null record;

   procedure Finalize (Object : in out Caller);

end Finally;


package body Finally is

   procedure Finalize (Object : in out Caller)
   is
   begin
      Object.Callee.all;
   end Finalize;

end Finally;


with Ada.Text_IO; use Ada.Text_IO;
with Finally;
procedure Finally_Demo is
begin

   declare

      X : Integer := 21;

      --  The cleanup procedure,to be executed when this block is left
      procedure F
      is
      begin
         Put_Line ("X is " & Integer'Image (X));
      end F;

      --  The controlled object,whose deletion will execute F
      F_Caller : Finally.Caller (F'Access);

   begin

      X := 42;

      raise Constraint_Error;

   end;

end Finally_Demo;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读