需要在 Java 中创建一个类,就像在 C 中的结构一样

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5619633/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 11:56:28  来源:igfitidea点击:

Need to create a class in Java like a structure in C

javacstructure

提问by Abhisek

I have a structure in "C" like this

我在“C”中有一个这样的结构

typedef struct SKT_SubHeader_s
{
        U32 subLength;
        U8 subCode;
        U8 subType;
        U8 subResult;
        U8 subCause;
        U8 subSrcMSISDN[RBT_SUBSCRIBER_NO_LEN];
        U8 subDstMSISDN[RBT_SUBSCRIBER_NO_LEN];
        S8 subRsv[20];
        S16 subSrvType;
        S16 subSrvId;
        S16 subSndType;
        S16 subSndIdx;
        S8 subSndCode[RBT_TONE_ID_LEN];
        S8 subSndValue[RBT_TONE_ID_LEN];
        S32 subMsgId;
        U8 subBillFlag;
        S16 subGroupOrder;
        S8 subDate[9];
        S8 subGroupName[31];
        U8 subSpFlag;
        S8 subBillCode[21];
        S8 subReserve[30];
        U32 bodyLength;
        SKT_body_t bodyData[1];
}SKT_SubHeader_t;

I need to create a same type of a java class whose value i can access from outside and able to write in a file.

我需要创建一个相同类型的 java 类,它的值我可以从外部访问并能够写入文件。

回答by Eamonn McEvoy

Create an object of this class and you will be able to access each member.

创建此类的对象,您将能够访问每个成员。

Main.java

主程序

Skt_Subheader_s SKT_SubHeader_t = new SKT_SubHeader_s;
SKT_SubHeader_t.subLength = 10;

SKT_SubHeader_s.java

SKT_SubHeader_s.java

public class SKT_SubHeader_s
{
   public int subLength;
   public byte subCode;
   public byte subType;
   public byte subResult;
   public byte subCause;
   public byte subSrcMSISDN[RBT_SUBSCRIBER_NO_LEN];
   public byte subDstMSISDN[RBT_SUBSCRIBER_NO_LEN];
   public byte subRsv[20];
   public string subSrvType;
   public string subSrvId;
   public string subSndType;
   public string subSndIdx;
   public string subSndCode[RBT_TONE_ID_LEN];
   public string subSndValue[RBT_TONE_ID_LEN];
   public string subMsgId;
   public byte subBillFlag;
   public string subGroupOrder;
   public string subDate[9];
   public string subGroupName[31];
   public byte subSpFlag;
   public string subBillCode[21];
   public byte subReserve[30];
   public int bodyLength;
   public SKT_body_t bodyData[1]; 

   public SKT_Subheader_s()
   {
      //Constructor, Initialize your variables here
      //e.g.
      // sublength = 0;
      //etc...
   }
}

回答by Argote

It seems to me like you just need to create a class which has those datatypes as public variables. You may want to initialize the variables in the constructor as well.

在我看来,您只需要创建一个将这些数据类型作为公共变量的类。您可能还想在构造函数中初始化变量。

Also, it is more common in Java to have the variables in a class like this set to private and just exposing gettersand setterspublicly.

此外,在 Java 中更常见的是将这样的类中的变量设置为私有并且只公开getterssetters公开。

回答by u404192

Maybe you can simply use a byte[]array to store this structured data, and use java.nio.ByteBufferto wrap and manipulate it.

也许您可以简单地使用byte[]数组来存储这种结构化数据,并使用java.nio.ByteBuffer它来包装和操作它。

回答by MarcoS

Java has no equivalent of struct. You must create a classto represent your struct. A good approach is to create a Java Bean. Your structelements become private fields, and then you create getter (and setter) methods for accessing (modifying) them. You should also create an appropriate constructor for your class, depending how you want to initialize an object of such a class.

Java 没有等效的struct. 您必须创建一个class来代表您的struct. 一个好的方法是创建一个Java Bean。您的struct元素成为私有字段,然后您创建 getter(和 setter)方法来访问(修改)它们。你还应该为你的类创建一个合适的构造函数,这取决于你想如何初始化这样一个类的对象。

A noteon primitive data types: I'm not 100% sure what U32, U8, S16, etc. represent in your code, but you should have a look at Java Primitive Data Typesto be sure that you can map them correctly. For example, be aware that Java does not implement unsigned ints (see here).

一个音符上的基本数据类型:我不是100%肯定什么U32U8S16,等在你的代码代表,但你应该看看Java的基本数据类型,以确保你能正确映射。例如,请注意 Java 不实现无符号整数(请参阅此处)。

回答by uckelman

What you need is a Java class with public members.

您需要的是一个带有公共成员的 Java 类。