Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IDEA对实现特定方法的类进行结构化搜索,而不是其他方法_Java_Intellij Idea_Structural Search - Fatal编程技术网

Java IDEA对实现特定方法的类进行结构化搜索,而不是其他方法

Java IDEA对实现特定方法的类进行结构化搜索,而不是其他方法,java,intellij-idea,structural-search,Java,Intellij Idea,Structural Search,在我们的代码库中,我正在寻找一个给定类的匿名子类,该类实现一个特定的方法,并且没有其他方法或字段。这些可以转换为lambda表达式,并且不需要匿名子类 我创建的搜索模板如下所示: new SimpleListSubstitution<$Type$>() { @Modifier Iterable<$Type$> getItems() { return $EXPRESSION$; } } new SimpleListSubstitution&

在我们的代码库中,我正在寻找一个给定类的匿名子类,该类实现一个特定的方法,并且没有其他方法或字段。这些可以转换为lambda表达式,并且不需要匿名子类

我创建的搜索模板如下所示:

new SimpleListSubstitution<$Type$>() {
    @Modifier Iterable<$Type$> getItems() {
        return $EXPRESSION$;
    }
}
new SimpleListSubstitution<$Type$>() {
    @Override
    protected Iterable<$Type$> getItems() {
        return $EXPRESSION$;
    }
    $ReturnType$ $Method$($ParameterType$ $Parameter$);
}
现在,这个表达式找到了我想要重构的所有实例,但另外它还找到了子类,这些子类也实现了其他方法帮助器方法或从超类重写

作为一个例子,我希望它在以下代码中找到子类:

template.put("pathToRoot", new SimpleListSubstitution<Page>() {
    @Override
    protected Iterable<Page> getItems() {
        return listOfPagesToRoot;
    }
});
但我不希望它在这段代码中找到子类,因为有额外的putAdditionalSubstitutions方法:

在“搜索/替换”对话框中,是否有一种方式表示没有其他方法


目前,我只看到在Find视图中检查每个命中并删除不需要的命中并替换其余命中的方法。由于我们将需要多次应用此重构和类似重构,例如处理并发编写的新代码,这将变得相当困难。

您可以使用如下搜索模板:

new SimpleListSubstitution<$Type$>() {
    @Modifier Iterable<$Type$> getItems() {
        return $EXPRESSION$;
    }
}
new SimpleListSubstitution<$Type$>() {
    @Override
    protected Iterable<$Type$> getItems() {
        return $EXPRESSION$;
    }
    $ReturnType$ $Method$($ParameterType$ $Parameter$);
}
使用以下变量设置: 方法最小值:0,最大值:0 参数最小值:0,最大值:无限


请注意,此模式尝试匹配其他方法,但由于该方法设置为0次,因此如果找到某个方法,匹配将失败。这样,只有未定义其他方法的类才会出现在搜索结果中。

是!这很有效。首先必须注意实际设置所有变量设置时忽略了参数计数,这只会抑制一些匹配。非常感谢。
new SimpleListSubstitution<$Type$>() {
    @Override
    protected Iterable<$Type$> getItems() {
        return $EXPRESSION$;
    }
    $ReturnType$ $Method$($ParameterType$ $Parameter$);
}