检查方法返回值的类型

时间:2018-03-17 12:09:19

标签: java types

我想检查方法是否返回了特定类型的值,并希望在if语句中使用它。

我有一个名为DBConn的类,我有一个名为dbConnect()的静态方法,如果连接成功则会返回Connection类型值,否则会抛出异常。

在我的main class我想做点什么

if (DBConn.dbConnect() == Connection) {
    // then do something
}

请注意,我在if条件中调用此静态函数。

我怎样才能在Java中实现这一点?

2 个答案:

答案 0 :(得分:1)

  

我想检查方法是否返回了特定类型的值

使用instanceof运算符。

if (DBConn.dbConnect() instanceof Connection) { ... }

如果左操作数可以转换为右操作数,则返回true。也就是说,如果它是Connection或其子类型,就像某些FastConnection extends Connection一样。

JLS$15.20.2

中详细介绍了这一点
  

在运行时,如果 RelationalExpression 的值不是instanceof且参考可以,则true运算符的结果为null投射§15.16)到 ReferenceType ,而不会引发ClassCastException。否则结果为false

请注意,您的描述听起来甚至不需要检查。你说

  

返回Connection或抛出异常

如果该方法抛出异常,您当前的代码将失败,instanceof根本没有帮助。

相反,你应该捕捉异常official tutorial by Oracle):

try {
    Connection con = DBConn.dbConnect();
    // Do something with con
} catch (ConnectionFailedException e) {
    System.err.println("Connection failed!");
    e.printStackTrace();
}

另请注意,如果您打算稍后使用该方法的结果,则应该将其保存在某个变量中。否则,您将需要重复调​​用不必要的方法,并且可能会根据实现引入一些问题。

Connection con = DBConn.dbConnect();
// Rest of code

答案 1 :(得分:0)

如果该方法将返回Connection或抛出异常,则处理此问题的正确方法是

try {
   Connection connection = SomeClass.someConnectionProvidingMethod();
} catch ( SomeException ) {
   ... handle exception ...
}

这是因为语言本身必须被破坏才能从

这样的方法接收非连接
public Connection someConnectionProvidingMethod() {
   ... implementation here ...
}

现在,如果您真的想花费CPU周期,时间和电力检查,如果语言编译正确且JVM运行正常,您也可以

if ( someVariable instanceof Connection ) {
  ...
}

但正如你所描述的那样,上面的陈述永远不会是假的,所以你可能也写了

if ( true ) {
  ...
}

if ( 1 == 1 ) {
   ...
}

我建议不要输入if语句来测试不变的条件;因为,他们误导了其他人阅读你的代码,并在你重新访问旧代码时误导你。