chartools.java,利用javax.tools动态编译执行java代码

参考:使用 javax.tools 创建动态应用程序

javax.tools 包是一种添加到 Java SE 6 的标准 API,可以实现 Java 源代码编译,使您能够添加动态功能来扩展静态应用程序。本文将探查javax.tools包中提供的主要类,以Java表达式表示计算一个数值函数y=x*x+x。更多详情请参考《使用 javax.tools 创建动态应用程序》和javax.tools API docs

complier.CharSequenceCompiler源码:

package complier;

import java.nio.charset.Charset;

import java.util.ArrayList;

import java.util.Collection;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import javax.tools.DiagnosticCollector;

import javax.tools.JavaCompiler;

import javax.tools.JavaFileObject;

import javax.tools.StandardLocation;

import javax.tools.ToolProvider;

import javax.tools.JavaCompiler.CompilationTask;

/**

* 编译{@link CharSequence}形式的源码,并实例化,返回一个实例。

* 用法示例(以编译MyInterface的一个实现类为例):

*

*

 
 

* MyInterface instance = null;

* JavaStringCompiler compiler = new JavaStringCompiler(null, null);

* try {

* Class newClass = compiler.compile("com.mypackage.NewClass",

* stringContaininSourceForNewClass, new Class>[] { MyInterface.class });

* instance = newClass.newInstance();

* } catch (JavaStringCompilerException ex) {

* ex.printStackTrace();

* } catch (IllegalAccessException ex) {

* ex.printStackTrace();

* }

* instance.someOperation(someArgs);

*

*/

public class CharSequenceCompiler {

/** 真正使用的编译器 */

private final JavaCompiler compiler;

private final ClassLoaderImpl classLoader;

/** 保存编译器编译中的诊断信息 */

private DiagnosticCollector diagnostics;

private final FileManagerImpl javaFileManager;

/** 编译参数 */

private final List options;

/**

* 构造一个新的实例,该实例持有指定的classloader

*

* @param loader

*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值