当前位置: 首页 > 面试题库 >

如何使用JDT获取静态字段的所有引用

璩慎之
2023-03-14
问题内容

我发现了Java:查找方法的所有调用者–获取所有调用特定方法的方法,这提示如何查找特定方法的所有调用者。

那么,如何获得静态字段的用户呢?

例如,当我有静态zAnotherClass,并且它与访问ClassA,如何获得IMethod ClassA#moved

public class AnotherClass {
    public static int z = 20;
    ....
}


public class ClassA {
    public int moved(int x, int y)
    {
        int temp = AnotherClass.z;
    }

问题答案:

该示例基于org.eclipse.jdt.internal。*类,由于JDT SearchEngine
API具有全功能,因此我认为您无需花费太多精力。就您而言,下面的代码就足够了:

    IWorkspace workspace = ResourcesPlugin.getWorkspace();
    IWorkspaceRoot root = workspace.getRoot();
    IProject plainProject = root.getProject("some project");
    IJavaProject javaProject = JavaCore.create(plainProject);
    try {
        IType type = javaProject.findType("foo.bar.AnotherClass");
        IField field = type.getField("z");
        //IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
        IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { plainProject });
        SearchPattern searchParttern = SearchPattern.createPattern(field,
                IJavaSearchConstants.REFERENCES);
        SearchRequestor requestor = new SearchRequestor() {
            @Override
            public void acceptSearchMatch(SearchMatch match) {
                System.out.println(match.getElement());
            }
        };
        SearchEngine searchEngine = new SearchEngine();
        searchEngine.search(searchParttern,
                new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }, scope,
                requestor, new NullProgressMonitor());
    } catch (Exception e) {
        // some exception handling you need to do
    }


 类似资料:
  • 我能够在弹性搜索 6.8 中使用聚合查询获取数据库中文本字段的所有值: 我正在尝试为嵌套字段做同样的事情。 下面是文本字段(城市)和嵌套字段(冷却)的示例 下面是我一直引用的文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-aggregations-bucket-terms-aggregation.html

  • 我有一个私有int数组,我需要以某种方式找到长度,但在静态类下无法做到这一点。我必须保持类的静态,是否可以添加其他方法来将a.length更改为其他方法? 该问题是由a.length引起的。

  • 问题内容: 考虑此表: 此SQL查询返回每种类型中最昂贵的商品:SELECT类型,MAX(price)FROM产品GROUP BY类型 我还想为每行获取属于上述最高价格的字段 ID 和 名称 。什么SQL查询将返回这样的表? 问题答案: 这是经常出现的问题。我通常的解决方法在逻辑上等效于@Martin Smith给出的答案,但不使用子查询: 我的解决方案以及到目前为止在该线程上给出的所有其他解决方

  • 问题内容: 我正在学习Java。我编写了以下代码,但是当我尝试输入时,我在Arrayfunction()中收到此错误“无法对非静态输入字段进行静态引用”。为什么会这样,我该如何解决? } 问题答案: 扫描仪未定义为静态,因此在错误的范围内 在内部创建Scanner实例, 或使用以下方法创建扫描仪

  • 问题内容: 使用JavaDoc,如何在类中引用最终静态字段的值? 我希望在此示例中将其替换为field的值。 问题答案: 你的意思是?

  • 问题内容: Java中的成员(字段或方法)与它们各自的类相关联,而不是与此类的对象相关联。以下代码尝试访问引用上的静态字段。 尽管返回,但它可以工作并显示。此代码如何工作? 问题答案: 该行为在Java语言规范中指定: 空引用可用于访问类(静态)变量而不会引起异常。 更详细地讲,进行静态场评估,例如以下工作(重点是我的工作)-在您的情况下: 计算主表达式,并丢弃结果。[…] 如果该字段是非空白的f