如何动态地给一个类加入一些方法和属性?

ccterran 2007-07-26 09:14:33
比如一个类:
class Test {

}

我想在别的类里使 Test 类具有 public int getX (), public void setX(x)方法,应该怎么做呢
...全文
413 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Clerk_9919 2007-07-27
  • 打赏
  • 举报
回复
个人认为使用ASM更加方便高效 http://asm.objectweb.org/
ccterran 2007-07-27
  • 打赏
  • 举报
回复
用过动态语言的,如Ruby,PHP,都知道可以通过反射机制给一个类动态添加属性和方法,这样类的内容我就可以动态生成。比如把数据库字段和POJO对象对应起来,如果可以动态添加,POJO就可以动态生成,无需再在里面写上一堆setters和getters。

我试试上面的方案。
flyforlove 2007-07-27
  • 打赏
  • 举报
回复
当然可以了,网上有很多这方面的应用,比如spring就是用了动态字节码生成技术。
看看这些开源工具吧
http://www.open-open.com/54.htm

把静态的java语言像动态语言一样用起来!!!!
sore520 2007-07-27
  • 打赏
  • 举报
回复
不知道对类进行读写 遵守一定的标准行不?
bojianyu 2007-07-27
  • 打赏
  • 举报
回复
妙!
dice_com 2007-07-27
  • 打赏
  • 举报
回复
能问一下楼主这个需求的来源是什么么?能把你遇到的情况说的更明确一些吗?
Yanbin_Q 2007-07-27
  • 打赏
  • 举报
回复
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的插件可下载。
zdjray 2007-07-27
  • 打赏
  • 举报
回复
使用继承Test的办法,在子类中扩展方法
这样既规范,又解决问题~~
yijie1206688 2007-07-26
  • 打赏
  • 举报
回复
不知道你是不是这个意思:
回调:
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());
}
}
feihua317 2007-07-26
  • 打赏
  • 举报
回复
当然不可以!如果可以的话,安全性就出大问题了,那个时候JAVA就要被淘汰了!!
但有例外,除非你是高手中的高手,懂得破解字节码!impossible mission...
zapdos 2007-07-26
  • 打赏
  • 举报
回复
你可以直接输出到.java文件里啊
zapdos 2007-07-26
  • 打赏
  • 举报
回复
用JAVA程序来写JAVA程序,再编译,不算动态生成么?
clevercong 2007-07-26
  • 打赏
  • 举报
回复
应该不可以。必须实现指定,可能N年后的人工智能能做到吧
ccterran 2007-07-26
  • 打赏
  • 举报
回复
应该不可以,但如果可以的话,就可以动态生成代码,不仅省去了大量人力,还可以使类结构变得相当简单。
zapdos 2007-07-26
  • 打赏
  • 举报
回复
我没试过,但直觉上觉得这样不可以
因为不知什么时候你给一个接口加上个方法那就麻烦了
ccterran 2007-07-26
  • 打赏
  • 举报
回复
谢谢回复。我的意思是说可以在其他类里面调一些方法来完成这个工作,比如:
class Test {

}

class MethodAdder {
public void addMethod () {
add(Test, "public int getX () {}");
}
}

如果这样能执行就好了。
zapdos 2007-07-26
  • 打赏
  • 举报
回复
修改.class文件
或者写个反编译代码出来,反编译》添加方法》编译,您看可以么?

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧