有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java查找可以实例化的相关类型

在Eclipse(Mars,FWIW)中,我试图构建一个与另一个类型相关的类型列表。所谓“相关”我的意思是,我可能在某个时候想要类型X的超类型,而在另一个时候我可能想要类型X的子类型。到目前为止,一切顺利。这听起来很像Eclipse "Open Type" dialog restricted to a particular interface。但是

我只想要在代码中的某个特定点可以实际使用的类型。例如,假设我想替换下面的null

myFoo.setBar(null);

其中setBar()声明如下:

public class Foo {
    // ...
    public void setBar(Bar theNewBar) {
        this.myBar = theNewBar;
    }
    // ...
}

我不关心对Bar的现有实例或其子类型的引用,我只关心Bar本身及其子类型,我可以当场实例化,就好像我要写:

myFoo.setBar(new SubBar());

因此,特别地,声明为private的类型将被排除Local类型将被排除在外(除非我能确定它们是在我当时使用的方法中声明的。在其他地方声明的匿名内部类也被排除在外。等等……任何基于其声明插件中定义的访问规则不可见的类型(即,其插件不export它)。(这毕竟是Eclipse,我关心的是是否符合插件模型。)有一些代码辅助选项将排除这些类型(我认为代码辅助\不鼓励\引用\检查和代码辅助\禁止\引用\检查做我想做的),但代码辅助无法按子类型或超类型进行区分

所以基本上,如果我不能直接实例化它,也不能为它编写匿名内部类,我就不想看到它

我尝试过使用ITypeHierarchy,但在创建它或它返回的ITypes中,我看不到任何可以用于区分我上面提到的标准的方法

IType.isLocal()IType.isAnonymous()帮助。我可以用它们来排除本地和匿名类型。但是其他人呢?例如,我不关心类型是protected还是package default,我关心是否可以实例化它。某些protectedpackage default类型可以在代码中的任何给定点实例化,而其他类型则不能

但是,我希望看到如果将声明插件添加到清单中,可以实例化的类型。mf依赖项

我怎样才能找到我想要的类型(使用ITypeHierarchy或任何其他机制),或者从ITypeHierarchy中排除我不想要的类型


共 (1) 个答案

  1. # 1 楼答案

    ^{}是一个^{},它有^{} 方法返回由^{}定义的标志,该标志具有良好的帮助器方法,例如:

    Flags.isAbstract(iType.getFlags())
    Flags.isInterface(iType.getFlags())
    Flags.isPackageDefault(iType.getFlags()) // You then compare package yourself
    Flags.isProtected(iType.getFlags()) // You then compare package yourself
    Flags.isPublic(iType.getFlags())