日期:2014-05-20  浏览次数:20564 次

如何动态地给一个类加入一些方法和属性?
比如一个类:
class   Test   {

}

我想在别的类里使   Test   类具有   public   int   getX   (),   public   void   setX(x)方法,应该怎么做呢

------解决方案--------------------
修改.class文件
或者写个反编译代码出来,反编译》添加方法》编译,您看可以么?
------解决方案--------------------
我没试过,但直觉上觉得这样不可以
因为不知什么时候你给一个接口加上个方法那就麻烦了
------解决方案--------------------
应该不可以。必须实现指定,可能N年后的人工智能能做到吧
------解决方案--------------------
用JAVA程序来写JAVA程序,再编译,不算动态生成么?
------解决方案--------------------
你可以直接输出到.java文件里啊
------解决方案--------------------
当然不可以!如果可以的话,安全性就出大问题了,那个时候JAVA就要被淘汰了!!
但有例外,除非你是高手中的高手,懂得破解字节码!impossible mission...
------解决方案--------------------
不知道你是不是这个意思:
回调:
package org.battwofame.hellojava.test.test1;

class CallBack {
public void callBack() {
System.out.println( "aaaaaaaaaaaaaaaaaa ");
}
}

interface ICallBack {
public void callBack(CallBack cb);
}

public class TestCallBack implements ICallBack {
public void callBack(CallBack cb) {
cb.callBack();
}
public static void main(String[] args) {
TestCallBack tcb = new TestCallBack();
tcb.callBack(new CallBack());
}
}
------解决方案--------------------
使用继承Test的办法,在子类中扩展方法
这样既规范,又解决问题~~
------解决方案--------------------
public aspect ExtendClassRecipe
{
private int MyClass.newvariable = 20; //给类MyClass动态增加一个属性

public int MyClass.bar(String name) //给类MyClass动态增加一个方法
{
System.out.println( "In bar(String name), name: "+name);
return this.newVariable;
}
}

需要用AspectJ支持,有Eclipse的插件可下载。
------解决方案--------------------
当然可以了,网上有很多这方面的应用,比如spring就是用了动态字节码生成技术。
看看这些开源工具吧
http://www.open-open.com/54.htm

把静态的java语言像动态语言一样用起来!!!!