编程语言
首页 > 编程语言> > 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类一样实现构造函数?

解决方法:

浮点数不是离散类型,“判别符必须具有离散或访问类型”. Ada没有您在C语言启发的语言家族中找到的那种构造函数.尝试为此重新分配判别器,就像试图将螺丝钉在墙上.如果它确实起作用了,结果仍然不会很漂亮.

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

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

其他注意事项:

>您的访问类型MyClass与记录类型具有相同的名称.那行不通.
>您在Java示例中将intTest声明为私有静态,但在Ada包的私有部分中声明了它.这等效于受保护,因为子程序包可以访问它.而是在包主体中声明它,这与私有静态等效.

标签:ada,java
来源: https://codeday.me/bug/20191030/1964385.html