gpt4 book ai didi

java - 可能已经分配了最终变量

转载 作者:行者123 更新时间:2023-11-29 10:06:15 24 4
gpt4 key购买 nike

我正在编写一个程序,其中有两个我希望使用的最终变量,我需要在实际运行该类时设置它们,因为它们在每个实例中可能都不相同。

我的初始化与我希望使用的任何其他类变量相同,我初始化名称和类型而不是值。

   public final String filename, filepath;

在构造函数中我设置值如下

 public myClass(String value) {
this.filename = value;
this.filepath = anotherPartOfValue;
}

当我这样做时,我收到一条警告“可能已经分配了最终字段 [x]”

有没有办法避免这个警告并仍然保持最终状态并在构造函数中设置值?

顺便说一句,我正在使用 eclipse。


编辑:

这是给我错误的确切代码

import java.io.*;

public class Dirt {

private String[] tables;
private int numTables;
private final String filename, filepath;

public Dirt(String file) {
this.tables = new String[0];
this.numTables = 0;

for (int i = file.length(); i < 0; i--) {
if (file.charAt(i) == '/') {
this.filename = file.substring(i);
this.filepath = file.substring(1, i-1);
}
}
}

最佳答案

问题是您要在循环中为最终变量赋值。没有什么可以阻止循环不止一次地循环和 if 条件被满足不止一次。 (如果 file 中有两个 '/' 字符会怎样?或者没有?)

解决这个问题的一种方法是在构造函数中使用临时字符串变量,然后在最后将它们分配给 filenamefilepath:

public Dirt(String file) {
this.tables = new String[0];
this.numTables = 0;
String name = null;
String path = null;

for (int i = file.length(); i < 0; i--) {
if (file.charAt(i) == '/') {
name = file.substring(i);
path = file.substring(1, i-1);
// need a break here?
}
}
this.filename = name;
this.filepath = path;
}

这很丑陋,但它是一种直接的方法,可以确定 filenamefilepath 肯定会被分配,而且肯定只会被分配一次。

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

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