如何在 Java 中对接口对象使用 try-with-resources 语句
How to use try-with-resources statement with interface object in Java
我想使用 try-with-resources
语句将接口对象定义为具体 class。这是一些示例代码,松散地定义了我的界面和 classes.
interface IFoo extends AutoCloseable
{
...
}
class Bar1 implements IFoo
{
...
}
class Bar2 implements IFoo
{
...
}
class Bar3 implements IFoo
{
...
}
// More Bar classes.........
我现在需要定义一个 IFoo
对象,但是具体的 class 取决于我的代码的另一个变量。所有具体 classes 的逻辑都是相同的。所以我想使用try-with-resources
语句来定义接口对象,但是我需要使用条件语句来查看我需要将接口对象定义为哪个具体class。
从逻辑上讲,这就是我想要做的:
public void doLogic(int x)
try (
IFoo obj;
if (x > 0) { obj = new Bar1(); }
else if (x == 0) { obj = new Bar2(); }
else { obj = new Bar3(); }
)
{
// Logic with obj
}
}
我找到的与此相关的唯一资源是@Denis 的问题:
然而,那里给出的解决方案需要嵌套的三元语句用于我的场景,而且很快就会变得混乱。
有人知道这个问题的完美解决方案吗?
定义一个工厂方法来创建 IFoo
实例:
IFoo createInstance(int x) {
if (x > 0) { return new Bar1(); }
else if (x == 0) { return new Bar2(); }
else { return new Bar3(); }
}
然后在您的 try-with-resources 初始化程序中调用它:
public void doLogic(int x) {
try (IFoo ifoo = createInstance(x)) {
// Logic with obj
}
}
我同意最好的解决方案是像 回答中那样编写辅助方法。
不过,我还想指出,嵌套的三元运算符不会混乱。您根本不需要方括号,并且通过良好的格式可以使它看起来像 switch
语句:
try (IFoo foo = x > 20 ? new Bar1() :
x < 0 ? new Bar2() :
x == 10 ? new Bar3() :
x % 2 == 0 ? new Bar4() :
new Bar5()) {
// do stuff
}
我想使用 try-with-resources
语句将接口对象定义为具体 class。这是一些示例代码,松散地定义了我的界面和 classes.
interface IFoo extends AutoCloseable
{
...
}
class Bar1 implements IFoo
{
...
}
class Bar2 implements IFoo
{
...
}
class Bar3 implements IFoo
{
...
}
// More Bar classes.........
我现在需要定义一个 IFoo
对象,但是具体的 class 取决于我的代码的另一个变量。所有具体 classes 的逻辑都是相同的。所以我想使用try-with-resources
语句来定义接口对象,但是我需要使用条件语句来查看我需要将接口对象定义为哪个具体class。
从逻辑上讲,这就是我想要做的:
public void doLogic(int x)
try (
IFoo obj;
if (x > 0) { obj = new Bar1(); }
else if (x == 0) { obj = new Bar2(); }
else { obj = new Bar3(); }
)
{
// Logic with obj
}
}
我找到的与此相关的唯一资源是@Denis 的问题:
有人知道这个问题的完美解决方案吗?
定义一个工厂方法来创建 IFoo
实例:
IFoo createInstance(int x) {
if (x > 0) { return new Bar1(); }
else if (x == 0) { return new Bar2(); }
else { return new Bar3(); }
}
然后在您的 try-with-resources 初始化程序中调用它:
public void doLogic(int x) {
try (IFoo ifoo = createInstance(x)) {
// Logic with obj
}
}
我同意最好的解决方案是像
不过,我还想指出,嵌套的三元运算符不会混乱。您根本不需要方括号,并且通过良好的格式可以使它看起来像 switch
语句:
try (IFoo foo = x > 20 ? new Bar1() :
x < 0 ? new Bar2() :
x == 10 ? new Bar3() :
x % 2 == 0 ? new Bar4() :
new Bar5()) {
// do stuff
}