JavaCompiler使用例子

package com.test;

import java.io.IOException; 
import java.lang.reflect.Method; 
import java.net.URI; 
import java.util.Arrays;

import javax.tools.JavaCompiler; 
import javax.tools.JavaFileObject; 
import javax.tools.SimpleJavaFileObject; 
import javax.tools.StandardJavaFileManager; 
import javax.tools.ToolProvider;

public class CompileString { 
    public static void main(String[] args) throws Exception { 
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
        System.out.println(""+ToolProvider.getSystemJavaCompiler()); 
        StandardJavaFileManager fileManager = compiler.getStandardFileManager( 
                null, null, null);

        StringObject so = new StringObject( 
                "CalculatorTest", 
                "class CalculatorTest {" 
                        + " public int multiply(int multiplicand, int multiplier) {" 
                        + " System.out.println(multiplicand);" 
                        + " System.out.println(multiplier);" 
                        + " return multiplicand * multiplier;" + " }" + "}");

        JavaFileObject file = so;

        Iterable files = Arrays.asList(file); 
        JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, 
                null, null, null, files);

        Boolean result = task.call(); 
        System.out.println(result); 
        if (result) { 
            Class clazz = Class.forName("CalculatorTest");

            Object instance = clazz.newInstance();

            Method m = clazz.getMethod("multiply", new Class[] { int.class, 
                    int.class });

            Object[] o = new Object[] { 3, 2 }; 
            System.out.println(m.invoke(instance, o)); 
        } 
    } 
}

class StringObject extends SimpleJavaFileObject { 
    private String contents = null;

    public StringObject(String className, String contents) throws Exception { 
        super(URI.create("string:///" + className.replace('.', '/') 
                + Kind.SOURCE.extension), Kind.SOURCE); 
        this.contents = contents; 
    }

    public CharSequence getCharContent(boolean ignoreEncodingErrors) 
            throws IOException { 
        return contents; 
    } 
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值