我想检查方法是否返回了特定类型的值,并希望在if
语句中使用它。
我有一个名为DBConn
的类,我有一个名为dbConnect()
的静态方法,如果连接成功则会返回Connection
类型值,否则会抛出异常。
在我的main class
我想做点什么
if (DBConn.dbConnect() == Connection) {
// then do something
}
请注意,我在if条件中调用此静态函数。
我怎样才能在Java中实现这一点?
答案 0 :(得分:1)
我想检查方法是否返回了特定类型的值
使用instanceof
运算符。
if (DBConn.dbConnect() instanceof Connection) { ... }
如果左操作数可以转换为右操作数,则返回true
。也就是说,如果它是Connection
或其子类型,就像某些FastConnection extends Connection
一样。
在运行时,如果 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
语句来测试不变的条件;因为,他们误导了其他人阅读你的代码,并在你重新访问旧代码时误导你。