空白最终变量
Blank final variables
我正在尝试合并
- public 访问变量
- 非静态变量
- 不是预定值
- 一次设定值(最终)
- 整数或整数
更新后的代码 无法正常工作 'how to do it' 上的答案一定很简单,但我需要帮助:
public class foo
{
public final int smth; //Variable might not have been initialized
public final Integer smthElse; //Variable might not have been initialized
public foo(JSONObject myObj)
{
if(myObj != null) {
try {
int extraParam = Integer.parseInt("ABCD"); //This is just an example for Exception to be called
smth = extraParam;
smthElse = extraParam;
} catch (Exception e) {}
} else {
smth = 1;
smthElse = 2;
}
}
}
P.S。我不想使用 (private int + public getter + private setter)
当 myObj
为 null 时,不会设置最终字段。这会导致编译错误,它们必须在 foo(Object myObj, int extraParam)
构造函数完成后设置。
如果您需要创建 foo
的实例,可以添加一个 else
块。
public foo(Object myObj, int extraParam) {
if (myObj != null) {
smth = extraParam;
smthElse = extraParam;
} else {
smth = 0;
smthElse = 0;
}
}
或者创建一个工厂方法来执行检查。
private foo(int extraParam) {
smth = extraParam;
smthElse = extraParam;
}
public static foo from(Object myObj, int extraParam) {
return (myObj == null) ? new foo(0) : new foo(extraParam);
}
当您在 try
块中执行赋值时,编译器将其视为 try … catch …
构造之后“可能发生或可能未发生”,这使得它不符合 final
你想在该构造之后使用的变量。
解决方案是使用临时非最终变量,您可以多次赋值,并在操作结束时对 final
变量执行确定赋值。
例如
public class Foo
{
public final int smth;
public final Integer smthElse;
public Foo(JSONObject myObj) {
int smthValue = 1;
Integer smthElseValue = 2;
if(myObj != null) try {
int extraParam = Integer.parseInt("ABCD"); //This is just an example
smthValue = extraParam;
smthElseValue = extraParam;
} catch (Exception e) {}
smth = smthValue;
smthElse = smthElseValue;
}
}
我正在尝试合并
- public 访问变量
- 非静态变量
- 不是预定值
- 一次设定值(最终)
- 整数或整数
更新后的代码 无法正常工作 'how to do it' 上的答案一定很简单,但我需要帮助:
public class foo
{
public final int smth; //Variable might not have been initialized
public final Integer smthElse; //Variable might not have been initialized
public foo(JSONObject myObj)
{
if(myObj != null) {
try {
int extraParam = Integer.parseInt("ABCD"); //This is just an example for Exception to be called
smth = extraParam;
smthElse = extraParam;
} catch (Exception e) {}
} else {
smth = 1;
smthElse = 2;
}
}
}
P.S。我不想使用 (private int + public getter + private setter)
当 myObj
为 null 时,不会设置最终字段。这会导致编译错误,它们必须在 foo(Object myObj, int extraParam)
构造函数完成后设置。
如果您需要创建 foo
的实例,可以添加一个 else
块。
public foo(Object myObj, int extraParam) {
if (myObj != null) {
smth = extraParam;
smthElse = extraParam;
} else {
smth = 0;
smthElse = 0;
}
}
或者创建一个工厂方法来执行检查。
private foo(int extraParam) {
smth = extraParam;
smthElse = extraParam;
}
public static foo from(Object myObj, int extraParam) {
return (myObj == null) ? new foo(0) : new foo(extraParam);
}
当您在 try
块中执行赋值时,编译器将其视为 try … catch …
构造之后“可能发生或可能未发生”,这使得它不符合 final
你想在该构造之后使用的变量。
解决方案是使用临时非最终变量,您可以多次赋值,并在操作结束时对 final
变量执行确定赋值。
例如
public class Foo
{
public final int smth;
public final Integer smthElse;
public Foo(JSONObject myObj) {
int smthValue = 1;
Integer smthElseValue = 2;
if(myObj != null) try {
int extraParam = Integer.parseInt("ABCD"); //This is just an example
smthValue = extraParam;
smthElseValue = extraParam;
} catch (Exception e) {}
smth = smthValue;
smthElse = smthElseValue;
}
}