用户定义类型的 Java 数组

标签 java arrays types defined

我正在尝试填充用户定义类型的数组 - 由 3 个字符串和 1 个 boolean 值组成的数组。类型名称为 PrinterType.,并提供这 3 个字符串和 boolean 值的 SET 和 GET 方法。

我试图在另一个类文件中使用它,其中将执行数组填充,但是当我运行该项目时,我收到 java.lang.NullPointerException

我知道这是字符串字段未初始化的问题,但我不知道如何初始化用户定义类型数组的字符串字段。我希望有人能在这方面帮助我。用户定义的类型和实现类如下。

顺便说一句,错误指向实现类的行:Printers[i].setPersonality(aLineOfText[0].toString());

//implementing class =======================================
package MainPkg;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ReadDefinitions
{
final String sFileName = "C:/Definitions OEvP/Printers.txt";
private static int iNoOfLines;
public PrinterType[] Printers;


private int getNumberOfLines() throws IOException
{   
FileReader fr = new FileReader(sFileName);
BufferedReader br = new BufferedReader(fr);

iNoOfLines = 0;

while (br.readLine() != null)
{
    iNoOfLines++;
}

br.close();
fr.close();

return iNoOfLines;
}

public void setArray() throws IOException
{
Printers = new PrinterType[this.getNumberOfLines()];
int i = 0;

FileReader fr = new FileReader(sFileName);
BufferedReader br = new BufferedReader(fr);
String[] aLineOfText = {};

while (i != this.getNumberOfLines())
{   
    aLineOfText = br.readLine().split(";");
    Printers[i].setPersonality(aLineOfText[0].toString());
    Printers[i].setProductNumber(aLineOfText[1].toString());
    Printers[i].setPL(aLineOfText[2].toString());

    if ("1" == aLineOfText[3].toString())
    {
        Printers[i].setHipot(Boolean.TRUE);
    }
    else
        {
            Printers[i].setHipot(Boolean.FALSE);
        }

    i++;
    aLineOfText = null;
    System.gc();
}
}   

}


//user defined Class ======================================

package MainPkg;

public class PrinterType
{
private String sPersonality;
private String sProductNumber;
private String sPL;
private Boolean bHipot;

//constructor
PrinterType()
{
sPersonality = "test";
sProductNumber = "test";
sPL = "test";
}

//printer information
//set methods
public void setPersonality(String localString)
{
    sPersonality = localString; 
}

public void setProductNumber(String localString)
{
    sProductNumber = localString;
}

public void setPL(String localString)
{
    sPL = localString;
}

public void setHipot(Boolean localBoolean)
{
    bHipot = localBoolean;
}

//get methods
public String getPersonality()
{
    return sPersonality;
}

public String getProductNumber()
{
    return sProductNumber;
}

public String getPL()
{
    return sPL;
}

public Boolean getHipot()
{
    return bHipot;
}   
}

最佳答案

您没有初始化打印机阵列的项目。

您只是创建了一个包含 PrinterType 空项的数组。

Printers = new PrinterType[this.getNumberOfLines()];

// Initialization
for(int i = 0, l = this.getNumberOfLines(); i < l; i++)
    Printers[i] = new PrinterType();

关于用户定义类型的 Java 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26826464/

相关文章:

java - 使用什么库来使用 Java 访问 Google Cloud Storage?

java - 无法使用 Java 语言访问类,但可以使用 Kotlin 访问类

数组中的 iOS Swift 访问字符串

haskell - 为什么 "fmap (replicate 3) Just"的类型为 "a -> [Maybe a]",在 Haskell 中

Python:从名称中获取类型对象?

C 数据类型的范围

java - 将相对值应用于数组

java - 为什么从多个选项卡注销后会生成不同的 session ID?

python - `ndarray.flags[' OWNDATA' ]`, ` ndarray.base`、 `id(ndarray)` 和 `ndarray.__array_interface__[' data']` 有什么不同?

arrays - 什么是好的洗牌百分比?