我通常不使用IDE进行开发的原因之一是我已经习惯了vi keybindings,我通常最终弄乱了我的文本并放入了很多"w",我无法使用vi强大的正则表达式替换机制.是否有任何IDE允许您配置vi键绑定或使用vi作为IDE中的编辑器?
这是我想要做的一个人为的例子,但最低限度地表达了所需的行为.我想引用调用属性访问的对象的实例.我首先尝试'this',但是它引用了封闭类,而不是MetaClass或String实例.
String.metaClass.propertyMissing = { String name ->
'I do not exist, but my name is ' + <the String instance> + '.' + $name
}
Run Code Online (Sandbox Code Playgroud) 我的用例是使用JDK 6中提供的ToolProvider和JavaCompiler类从java程序编译生成的源文件.源文件包含对上下文类加载器中的类的引用(它在J2EE容器中运行),但不包含在系统类加载器中.我的理解是,默认情况下,ToolProvider将使用系统类加载器创建JavaCompiler实例.
有没有办法为JavaCompiler指定一个类加载器?
我尝试了这种方法,从IBM DeveloperWorks上的某些东西进行了修改:
FileManagerImpl fm =
new FileManagerImpl(compiler.getStandardFileManager(null, null, null););
Run Code Online (Sandbox Code Playgroud)
将FileManagerImpl定义为:
static final class FileManagerImpl
extends ForwardingJavaFileManager<JavaFileManager> {
public FileManagerImpl(JavaFileManager fileManager) {
super(fileManager);
}
@Override
public ClassLoader getClassLoader(JavaFileManager.Location location) {
new Exception().printStackTrace();
return Thread.currentThread().getContextClassLoader();
}
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪表明它仅在注释处理期间调用一次.我验证了要编译的源文件中引用的类不在系统类路径中,但可以从上下文类加载器中获得.
在Java中,Class.forName是否会返回null,或者如果无法找到类,它是否会抛出ClassNotFoundException或NoClassDefFoundError?