我有一个CompilationUnit包含一个其中未导入对另一个类的引用的类。
Eclipse可以轻松解决此类问题,并建议导入缺少的类(位于父包中)。

如何在不知道其名称或位置的情况下以编程方式导入丢失的类,以便在生成的Java类源文件中,导入显示为:import com.foobar.missingclass

谢谢。

编辑1:
为了回应一些意见:反射,注入,ClassLoader和其他运行时机制不是正确的选择,因为我正在通过Eclipse JDT API静态地处理类。
拜托,我只是在寻找静态的解决方案。

仅供参考:这就是我们从imports列出CompilationUnit的方式:

List<ImportDeclaration> existingImports = aCompilationUnit.imports();


Reference.

问题是我不知道如何生成丢失的ImportDeclaration

谢谢。

最佳答案

引用我自己的answer in the JDT forum


  有关操纵Java文件导入的信息,请参见org.eclipse.jdt.core.dom.rewrite.ImportRewrite类:Javadoc概述了其用法。
  
  如果您仅有一个无法解析的简单名称,则诸如ASTResolving.guessBindingForTypeReference(node)之类的实用程序将派上用场。
  
  如果这对您不起作用,则可能必须使用org.eclipse.jdt.core.search.SearchEngine并以某种方式处理给定简单名称的可能很多匹配项。


让我补充一下:如果创建ImportDeclaration是您唯一的问题,请使用aCompilationUnit.getAST().newImportDeclaration(),但是使用ImportRewrite的功能要强大得多,因为它直接产生更新文件所需的TextEdit

关于java - Java:以编程方式导入类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31572602/

10-11 22:23
查看更多