java - Ada 中的构造函数

标签 java ada

我正在尝试实现一个构造函数,就像它在 Ada 2005 中的 Java 或 C++ 中使用的那样。

我在 Java 中有这个类:

public class MyClass {
    private static int intTest = 0; 
    private float floatTest = 0.0f; 
    private float floatTest2 = 0.0f; 

    public MyClass(float f_test, float f_test1) {
        MyClass.intTest++;
        this.floatTest = f_test;
        this.floatTest2 = f_test1;       
    }
}

现在我正尝试在 Ada 2005 中实现它。这就是我所做的,但出现错误。

with Ada.Finalization; use Ada.Finalization;
package MyClasses is    
    type MyClass (f_test, f_test1 : float)
        is new Controlled with private; 
    type MyClass is access all MyClass'Class;   
    private
        intTest : Integer := 0;
        type MyClass( f_test, f_test1: float )
            is new Controlled with
            record
                floatTest : float := f_test;
                floatTest2 : float := f_test1;
            end record;
overriding procedure Initialize (This : in out MyClass);    
end MyClass;

with Ada.Text_IO; 
use Ada.Text_IO;
package body MyClasses is
    procedure Initialize( This : in out MyClass ) is
    begin       
        intTest := intTest + 1;     
    end Initialize;
end MyClass;

在这一行我收到错误“判别式必须具有离散或访问类型”。

type MyClass (f_test, f_test1 : float)
    is new Controlled with private;

如何像在 java 类中那样实现构造函数?

最佳答案

Float 不是离散类型,“判别式必须具有离散或访问类型”。 Ada 没有您在受 C++ 启发的语言家族中找到的那种构造函数。试图为此重新调整判别式的用途就像试图将螺丝钉钉入墙壁。即使它确实有效,结果仍然不会很好。

相反,您应该有一个返回初始化对象的创建者函数:

type MyClass is new Controlled with private;
function Create(f_test, f_test1 : float) return MyClass;

其他注意事项:

  • 您的访问类型 MyClass 与记录类型同名。那行不通。
  • 您在 Java 示例中将 intTest 声明为 private static,但在 Ada 包的私有(private)部分中声明了它。这等同于 protected 因为子包可以访问它。相反,在包体中声明它,这实际上等同于 private static

关于java - Ada 中的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21093539/

相关文章:

java - 斑马 jPOS : How to have support for multiple scanners

java - 使用 Sutherland-Hodgman 算法时多边形裁剪不起作用

ada - ADA 中的 child 包裹安全吗?

ada - SPARK 中的程序验证 - 计算数组中的元素

ada - 在Ada中的Integer'Image值后取消空格

c++ - gnat gprbuild : how to build a dynamic dll and link with a static c++ library

winapi - GetRawInputDeviceList 失败并出现错误 87(参数不正确)

java - Weblogic 8.1.6常见的依赖有哪些

java - 如何在 Java 中对用户输入进行四舍五入

java - Model对象的抽象合理吗?