gpt4 book ai didi

java - 如何在静态类中初始化最终静态变量?

转载 作者:行者123 更新时间:2023-11-30 07:29:44 30 4
gpt4 key购买 nike

所以我正在使用 Processing 从数据文件中绘制 map 。我想在一个类(class)中储存第一行的一些信息。在处理这个类是 PApplet 的内部类,所以它必须是一个静态类(否则我会得到一个错误:静态字段只能在静态或顶级类型中声明)。

public static class PlacesInfo{
static final int totalCount;
static final float xMin;
static final float yMin;
static final float xMax;
static final float yMax;
static final int populationMax;
static final int densityMax;


//Set all static variables once
static{
String[] lines = loadStrings("population.tsv");
String info = lines[0].substring(2); //to delete some useless char
String[] infoInit = split(info, ','); //to parse the data of the first line

totalCount = int(infoInit[0]);
xMin = float(infoInit[1]);
xMax = float(infoInit[2]);
yMin = float(infoInit[3]);
yMax = float(infoInit[4]);
populationMax = int(infoInit[6]);
densityMax = int(infoInit[8]);
}
}

当我运行这段代码时,我得到一个错误,因为我不能使用 loadStrings() 函数(它是非静态的)。

所以我想要的是拥有可以从“population.tsv”文件初始化的静态最终变量。你有什么想法/建议?

最佳答案

1) 将方法设为静态,这样就没问题了——静态代码必须按顺序进行编译。将 loadStrings 函数放在静态代码块之前。

请注意:但是 - 您最好只创建一个静态的“init”方法,它会在您的静态代码块中调用。与您当前的实现不同,这将是可命名和可单元测试的。

2) 顺便说一句:你的 float 语法是关闭的,必须正确转换。

  int i = (int) 1.4f; 

3) 要初始化静态变量,您可以执行以下操作:

  • 声明一个静态 init() 方法,该方法读取文件并初始化静态变量。
  • 在单独的类或静态内部类中创建一个单独的 FileReader 对象,可以调用它来读取变量,并从您的静态代码块中调用它。
  • (坏主意)将文件读取逻辑放在你的大静态代码块中。然而,这将非常难看。

关于java - 如何在静态类中初始化最终静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8349966/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com