【问题标题】:Instantiation within a conditional statement在条件语句中实例化
【发布时间】:2016-11-30 11:14:41
【问题描述】:

我正在探索将一次性实例化作为安全对象处理的一种可能的不同方法的想法。这个想法是在if 语句的条件下完全实例化、测试和处置对象,但是我在实例化对象开始时遇到了一些麻烦。我认为问题在于我是如何处理这个概念的,但我很想看看是否有办法重新组织这个条件。

if((new ResultSet(dbPwdTest.getResultSet())).getString(1).equals(pwd/*need to hash this*/))
                {
                    return true;
                }

这有可能吗?目前,编译器返回“无法实例化类型'ResultSet'”。

编辑:也许答案在于使用 PreparedStatement 中包含的 ResultSet,因此以下方法可行:

if(dbPwdTest.getResultSet().getString(1).equals(pwd/*hash! hash! hash!*/))
                {
                    return true;
                }

虽然我不确定这种方法是否真的一样。

【问题讨论】:

  • 是的,这完全有可能,只是没有ResultSet。你为什么要创建一个接口的实例?
  • ResultSet 是一个接口,因此您不能创建它的实例(除非您提供实现)。
  • 您认为这如何使您的代码“安全”? java.sql.ResultSet 是一个接口,所以不能这样实例化它。
  • 已经拥有来自dbPwdTest.getResultSetResultSet吗?如果没有,我会认真建议重命名该方法... :-)
  • @T.J.Crowder 这个想法是包含整个测试条件(即在条件之外没有实例化),而不允许超过一个外部测试项目。但是,实例化 ResultSet 的实例会有点繁重,这就是为什么我希望这不是必需的。此外,getResultSet 是 PreparedStatement 的一种方法 - 虽然我有一个想法,我将在下面发布。

标签: java instantiation


【解决方案1】:

要实例化接口,您需要创建它的实现。这可以做到,但它会使条件非常难以阅读。我建议在 if 语句之前实例化接口。但要回答你的问题:

if((new ResultSet(dbPwdTest.getResultSet()) {
            //implement the interface methods
        }).getString(1).equals(pwd/*need to hash this*/))
    {
        return true;
    }

【讨论】:

  • 这是一个有趣的方法。使用这种方法,甚至可以将整个数据库查询包含在条件中,使整个方法真正一次性使用。
猜你喜欢
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 2022-10-18
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多