2013-06-18 168 views
0

我是新的论坛,也是Java编码方面的新作。使用javax.tools进行编译并且运行时没有反射

无论如何,我正在实现我的Java代码来动态编译和运行不同的类,这些类不是先验知道的,哪些可以随时间变化(不是太频繁)。 我发现基于javax.tools的示例here非常有用,但是由于我的工作应该在以后实时运行,所以我想尽可能避免使用Java反射。 你知道是否存在一种方法来运行编译后的代码而不使用reflation?有一些变量可以在编译后找到指向类的变量,然后用它来实例化类。

谢谢你是进步 卢卡

+0

Java反射是非常强大的...图书馆和框架利用它可以给予的能力,它不是那么慢或不正确,如果使用正确。提供替代品?我不知道...这取决于你想要如何动态的代码和其他要求和限制 – DarthCoder

+0

基本上这个程序应该用来获取和处理来自一般用途的传感器的数据。编辑不应该太频繁,但处理和获取可能会有很高的频率。但我不是专家,我只是在[site](http://docs.oracle.com/javase/tutorial/reflect/)上播下可能的问题,所以我不知道它的限制。 – user2497897

+0

嗯真的......但你为什么要用反射来从传感器获取信息?只是单独预先配对它们,只是将它们加载到您的项目中,如果您想动态执行它们 – DarthCoder

回答

0

嘿,这么看我不知道这是否是正确的或者这是你想要什么,但我会分裂的框架,因为这样...

接口接口只是更容易理解。

public interface fun { 
void fun(); 
} 

所以让我们说某人建立的代码为您的应用程序或框架... 给他你的界面,并告诉他,把功能,但其方法..这会是这样的..

public class TestDestination implements test.fun { 
public void fun(){ 

    System.out.println("Hello"); 

} 
} 

那么所有你需要做的就是加载这个类......你可以从用户输入的XML等等等等名字......这将是你的执行者

public class TestLoad { 
public static void main(String[] args) { 
    try { 
     Class t1 = Class.forName("test.temp.TestDestination"); 
     fun temp = (fun) t1.newInstance(); 
     temp.fun(); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (InstantiationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
} 

我不河畔e如果这正是你想要的......但它将是理想的保持加载器在一个单独的线程,并加载所有你想在程序的开始或懒惰加载它的类......你的选择 希望这可以帮助 我假设class.forName是有效的...纠正我,如果错了

+0

好,所以打电话给t1.newInstance可以看看[示例](http://stackoverflow.com/questions/435553/java - 反射性能)所以它可以使用这种方法......但你可能想按照需求调整它......但反射并不可怕,以至于在效率方面,如果你这样做的话。 – DarthCoder

+0

我花了一段时间才明白它,但这基本上是我在寻找的东西,非常感谢! 我想问你最后两个问题: 如果我动态编译TestDestination类,它会工作吗? 还有一些方法可以通过名称调用方法,而不会增加太多的计算工作量?请参阅 – user2497897

+0

,该延迟的问题是将相关的类加载到内存中。这无法避免,无论你需要了解的是......当你说'java 'java将它加载到内存中然后调用main。那种延迟是无法避免的吗?所以你告诉java这里要做的是除了加载基本要素加载在class.forName(“blah”)中给出的外部类,所以要做到这一点,它需要找到文件系统上的类并加载它,如果你正在创建一个实例等来问题关于动态编译的其他问题 – DarthCoder

相关问题