将具有多种结构的C标头转换为Java

时间:2018-06-21 11:38:59

标签: java c

我试图将用C编写的代码移植到Java上,并以一些头文件开始。一些头文件包含#define和多个typedef struct

我不确定如何将其接管Java。每个struct都需要一个新的Java类文件吗?我可以将整个头文件封装到一个类中吗?

要检索结构的成员,我需要创建getter / setter方法吗?有没有更简单的方法?

谢谢

1 个答案:

答案 0 :(得分:1)

Java支持类和内部类的任何嵌套。 顶级独立类通常在自己的文件中声明。 如果嵌套类,则可以使它们静态化,以便能够使用它们而无需创建对外部类的隐式引用。 否则,根据您的模型和使用情况,使用非静态内部构件可能会导致内存消耗膨胀并带来意想不到的后果。

示例:

简单的顶级课程:

public class A {
    public String text;
    public String moreText;
}

//Create an instance of the above:
A a = new A();
//property access for public properties requires no getters/setters from within or without the package
a.text = "Hello";
a.moreText = "World";
boolean b = "Hello".equals(a.text); //true

静态嵌套类:

public class A {
    public String text;
    public String moreText;
    public static class B {
        public int i;
    }
}

//Create an instance of B:
A.B b = new A.B();
//property access for public properties requires no getters/setters from within or without the package
b.i = 5;
//Note that no instance of A is actually created

非静态嵌套/内部类:

public class A {
    public String text;
    public String moreText;
    public class B {
        public B(String text) {
            A.this.text = text;
        }
        public int i;
        public A getA() {
            return A.this;
        }
    }
}
A.B b = new A.B("Hello");
System.out.println(b.getA().text); // Hello

请注意上面的内容如何创建A的隐式实例,其文本在B的构造函数中设置为“ Hello”。必须具有该A的显式访问器才能访问它。

这些是一些非常粗糙的例子。类的嵌套(静态或其他)是一种设计选择,可能取决于您的封装目标。视上下文而定,将静态嵌套类嵌套而不是在自己的文件中声明是更有意义的,但是两者都是有效的。

使用公开,私有,受保护或程序包(无)的可见性级别是另一种选择,但是当您继承时,您会发现通常首选使用getter / setter访问。而且,任何体面的IDE都会乐意为您生成它们,因此无需进行输入。这仅取决于直接属性访问或getter / setter方法是否更适合您的对象模型(或者实际上是个别课程)。

由于在此处复制所有内容是不可行的,因此建议您深入研究教程,例如Classes上的教程

编辑: 顶级课程不是static。谢谢@Wyzard。