【问题标题】:Adding additional checks to the instanceOf check in java在java中为instanceOf检查添加额外的检查
【发布时间】:2013-10-27 11:03:59
【问题描述】:

我有一种情况,我检查一些类的 instanceOf 以继续我的逻辑。

例如。

if (obj instanceof X)
{
    result = true;
}

但是现在我的遗留代码中的很多地方都在使用它。

我的问题是这个 instanceOf 现在只有在某些全局属性变量为真时才应该返回真。

我正在寻找一种替代解决方案来替换所有这些 instanceOf 检查,如下所示:

if (GLOBALPROPERTY == true)
{
    if (obj instanceof X)
    {
        result = true;
    }
}  

我可以在类 X 本身中注入这个检查,这样,无论我检查 instanceOf 这个类,它都会返回 false。

【问题讨论】:

  • 你使用它的所有类都有一个共同的祖先类吗?
  • 另外,您也可以使用result = obj instanceof X 而不是if
  • @R.J:如果result可能已经true并且他不希望它重置为false,则不会。
  • 所以准确地说,只有当全局属性为true时,我才会加载这些类,否则将找不到这些类。所以如果我简单地调用 result = obj instanceof X,它应该会抛出 NoClassDefFoundError 异常。
  • @T.J.Crowder - 如果它已经是真的,那么 ifresult = true; 的确切用途是什么?!尽管如此,这只是一个建议,可以帮助 OP 删除一些(可能的)额外代码。没有别的了。

标签: java instanceof


【解决方案1】:

不,你不能。

我能想到的最接近的事情是使用 AspectJ 进行面向方面的编程。但这会很棘手 - 首先,您可能必须从使用 instanceof 切换到使用正确的多态方法调用。

但实际上,您可能只需要在整个代码库中进行搜索和替换。

【讨论】:

    猜你喜欢
    • 2016-06-14
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多