gpt4 book ai didi

java - 可能已经分配了常量变量

转载 作者:行者123 更新时间:2023-12-01 00:06:33 24 4
gpt4 key购买 nike

我真的需要帮助。不知道如何解决这个问题。我想从属性文件中加载一些常量。我认为,带有 FileNotFoundException 的 Catch 只能在 properties.load() 上抛出。但是 IDE 是这么说的

VK_MIN_ID = VK_MIN_ID_DEFAULT;
VK_MAX_ID = VK_MAX_ID_DEFAULT;
MAX_USERS_TO_PARSE_AT_ONCE = MAX_USERS_TO_PARSE_AT_ONCE_DEFAULT;

这个变量可能已经被赋值。在哪里?完整代码:

private static final int VK_MIN_ID;
private static final int VK_MIN_ID_DEFAULT = 1;
private static final int VK_MAX_ID;
private static final int VK_MAX_ID_DEFAULT = 999_999_999;
private static final int MAX_USERS_TO_PARSE_AT_ONCE;
private static final int MAX_USERS_TO_PARSE_AT_ONCE_DEFAULT = 500;

static {
FileInputStream fileInputStream;
Properties properties = new Properties();

try {
fileInputStream = new FileInputStream("src/main/resources/vk.properties");
properties.load(fileInputStream);

if (properties.containsKey("vk.min.id")) {
VK_MIN_ID = Integer.parseInt(properties.getProperty("vk.min.id"));
} else {
VK_MIN_ID = VK_MIN_ID_DEFAULT;
}
if (properties.containsKey("vk.max.id")) {
VK_MAX_ID = Integer.parseInt(properties.getProperty("vk.max.id"));
} else {
VK_MAX_ID = VK_MAX_ID_DEFAULT;
}
if (properties.containsKey("max.users.to.parse.at.once")) {
MAX_USERS_TO_PARSE_AT_ONCE = Integer.parseInt(properties.getProperty("max.users.to.parse.at.once"));
} else {
MAX_USERS_TO_PARSE_AT_ONCE = MAX_USERS_TO_PARSE_AT_ONCE_DEFAULT;
}
} catch (FileNotFoundException e) {
logger.warn("Файл свойств отсуствует! Устанавливаем настройки по умолчанию...");
VK_MIN_ID = VK_MIN_ID_DEFAULT;
VK_MAX_ID = VK_MAX_ID_DEFAULT;
MAX_USERS_TO_PARSE_AT_ONCE = MAX_USERS_TO_PARSE_AT_ONCE_DEFAULT;
} catch (IOException e) {
logger.error("Ошибка чтения файла свойств! Работа будет прекращена", e);
}
}

非常感谢。

最佳答案

Java 编译器看不到我们能看到的——对 MAX_USERS_TO_PARSE_AT_ONCE 的赋值是在 try block 的末尾,因此它要么被赋值那里或 catch block 中。它发现它有可能在 try block 中被赋值,抛出异常,然后在 catch block 中再次赋值。

使用一个临时变量来解决这个问题。

int temp;
try {
// other code
if (properties.containsKey("max.users.to.parse.at.once")) {
temp = Integer.parseInt(properties.getProperty("max.users.to.parse.at.once"));
} else {
temp = MAX_USERS_TO_PARSE_AT_ONCE_DEFAULT;
}
} catch (FileNotFoundException e) {
// other code.
temp = MAX_USERS_TO_PARSE_AT_ONCE_DEFAULT;
} catch (IOException e) {
// You'll need to assign something to temp here too.
}

在最后一个 catch block 之后,将 temp 分配给您的 final 变量一次。

MAX_USERS_TO_PARSE_AT_ONCE = temp;

这样你可以保持 MAX_USERS_TO_PARSE_AT_ONCE final

关于java - 可能已经分配了常量变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31305440/

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