`

java 模拟动态对象

    博客分类:
  • java
阅读更多

 

 

package org.zero.base;

import java.util.HashMap;
import java.util.Map;

public class DynamicObject {
	private Map<String, Object> atts = null;
	private Map<String, IDynamicMethod> methods = null;
	private Object parent = null;

	public DynamicObject(Object obj) {
		super();
		parent = obj;
	}

	public DynamicObject() {
		super();
	}

	public void addAttribute(String name, Object value) {
		if (atts == null)
			atts = new HashMap<String, Object>();
		atts.put(name, value);
	}

	public Object removeAttribute(Object key) {
		if (atts == null)
			return null;
		return atts.remove(key);
	}

	public boolean hasAttribute(String name) {
		if (atts == null)
			return false;
		return atts.containsKey(name);
	}

	public void clear() {
		if (atts != null)
			atts.clear();
		if (methods != null)
			methods.clear();
	}

	public Object getAttribute(Object key) {
		if (atts == null)
			return false;
		return atts.get(key);
	}

	public Object getParent() {
		return parent;
	}

	public void setParent(Object parent) {
		this.parent = parent;
	}

	public void addMethod(String name, IDynamicMethod method) {
		if (methods == null)
			methods = new HashMap<String, IDynamicMethod>();
		methods.put(name, method);
	}

	public void removeMethod(String name) {
		if (methods != null)
			methods.remove(name);
	}

	public boolean hasMethod(String name) {
		return methods.containsKey(name);
	}

	public void invoke(String methodName, Object... args) {
		if (methods != null)
			methods.get(methodName).execute(this, args);
	}

	public Map<String, IDynamicMethod> getAppendMehods() {
		return methods;
	}

	public Map<String, Object> getAppendAtts() {
		return atts;
	}

	public static interface IDynamicMethod {
		public void execute(DynamicObject obj, Object... args);
	}

	public static void main(String[] args) {
		DynamicObject o = new DynamicObject();
		o.addAttribute("name", "hwp");
		o.addMethod("move", new IDynamicMethod() {
			@Override
			public void execute(DynamicObject obj, Object... args) {
				System.out.println("动态添加的方法被执行。。。");
			}
		});
		if (o.hasMethod("move"))
			o.invoke("move");
		if (o.hasAttribute("name"))
			System.out.println(o.getAttribute("name"));
	}
}
 
分享到:
评论

相关推荐

    Java 模拟线程并发

    总之,Java模拟线程并发是一个广泛且深入的话题,涵盖了线程的创建、同步、管理和高级并发工具的使用。理解和熟练应用这些知识,能够帮助开发者编写出高效、安全的多线程程序。在实际开发中,应根据具体需求选择合适...

    实现动态分区分配模拟实验 JAVA

    在这个“实现动态分区分配模拟实验 JAVA”中,我们将探讨如何使用Java编程语言来模拟这一过程。 动态分区分配的主要目标是最大化内存利用率,避免内存碎片,并能够适应不同大小的进程需求。常见的动态分区分配算法...

    Java模拟题 Java题库

    这里提供的“Java模拟题 Java题库”包含了10套完整的Java练习题目,每套都配有详细的答案,为学习者提供了宝贵的实践机会。 1. **基础语法**:Java的基础语法包括变量、数据类型、运算符、控制结构(如if语句、for...

    java模拟机

    Java模拟机,是一种软件模拟器,它允许开发者在没有特定硬件环境的情况下运行Java应用程序或Java虚拟机(JVM)。在Java开发过程中,模拟机扮演着至关重要的角色,它提供了跨平台兼容性,使得Java程序“一次编写,...

    Java模拟银行系统

    在本项目中,"Java模拟银行系统"是一个典型的软件开发...以上就是“Java模拟银行系统”项目中涉及的主要知识点,通过实践这个项目,开发者不仅能提升Java编程技能,还能深入理解面向对象设计原则和软件工程的最佳实践。

    Java面向对象编程经典实例-模拟彩票

    本实例——"Java面向对象编程经典实例-模拟彩票",是通过Java语言来实现一个彩票模拟系统,以帮助开发者更好地理解和掌握面向对象设计思想。 首先,我们来看"模拟彩票"这个主题。在实际生活中,彩票系统包含了购买...

    Java面向对象程序设计模拟试题

    - Java类在运行时由类加载器动态加载到JVM中。这个过程包括加载、验证、准备、解析和初始化五个阶段。其中,加载是指读取类文件数据,并转换成字节码;验证则是确保加载的字节码符合规范。 #### 4. 异常处理 - Java...

    java模拟spring ioc

    这篇博客“java模拟spring ioc”很可能是探讨如何在没有Spring框架的情况下,使用纯Java代码来实现类似Spring的IOC功能。以下将详细介绍Spring的IOC和DI概念以及如何模拟这些概念。 **依赖注入(Dependency ...

    java模拟键盘鼠标

    以上就是关于"java模拟键盘鼠标"这个项目的主要知识点。在实际开发中,需要注意模拟操作的准确性和效率,以及避免过于频繁的操作导致账号被系统识别为异常。同时,尊重他人的隐私和使用条款,确保这种技术的合法和...

    java模拟电梯上下楼程序

    在Java编程领域,模拟电梯上下楼程序是一种常见的练习,它能帮助开发者理解多线程、同步机制以及事件驱动编程的概念。`ElevatorSimulator`项目就是这样一个实例,它使用Java语言构建,具备良好的用户界面和规范化的...

    JAVA模拟键盘输入

    在Java编程中,模拟键盘输入是一项实用的技术,它允许程序在不依赖用户交互的情况下自动向系统或应用程序提供输入。这通常用于自动化测试、脚本执行或者其他需要模拟用户操作的场景。下面将详细介绍如何在Java中实现...

    Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架

    Jmockdata的工作原理是基于Java反射机制,它能动态地创建类的实例,并根据预设的规则生成随机数据填充到对象的属性中。这种随机数据的生成可以根据属性的数据类型进行,例如对于字符串类型,它可以生成随机长度的...

    java 模拟操作系统的进程调度

    Java 作为一种多平台、面向对象的语言,提供了丰富的工具和库,使得实现这样的模拟成为可能。 首先,我们需要了解基本的进程调度概念。进程调度的目标是优化系统的整体性能,通常通过不同的调度策略实现,如先来先...

    java 模拟银行账户

    java 课程小实验,简单的java语句,练习的实验

    最新版java模拟QQ登录空间

    【Java模拟QQ登录空间】是Java编程领域中的一个实践项目,主要目的是通过编程技术实现对QQ空间的模拟登录。这个项目对于学习Java网络编程、HTTP协议、JSON解析以及网络安全等多方面知识具有重要意义。 首先,Java是...

    java模拟线程死锁

    Java 模拟线程死锁 线程死锁 在 Java 中,线程死锁(Deadlock)是一种特殊的情况,发生在两个或多个线程之间的互相等待对方释放资源的状态。这种情况下,各个线程都在等待其他线程释放资源,而自己也占用着其他...

    二级java模拟软件

    【标题】"二级Java模拟软件"是一个专门为准备二级Java考试的考生设计的模拟测试平台。这个软件涵盖了二级Java考试的基础知识和编程题型,旨在帮助初学者熟悉考试环境,提高应试能力。 【描述】中提到,这款"二级...

    java模拟qq项目

    在本项目"java模拟qq项目"中,我们将深入探讨如何使用Java语言来构建一个功能完备的QQ模拟器,包括群聊和私聊功能,并且连接到数据库以存储和检索用户数据。这个项目对于想要提升Java编程技能,尤其是对网络编程和多...

    java开发模拟鼠标键盘操作

    `java.awt.Robot`类是Java标准库中用于创建机器人对象的,这个对象能够模拟人类对键盘和鼠标的动作。`java.awt.event.KeyEvent`则用来定义键盘事件相关的常量,帮助我们生成键盘事件。 1. **模拟鼠标操作**: 使用...

    java模拟银行源代码

    【Java模拟银行源代码解析】 Java模拟银行源代码是一组基于Java编程语言设计的软件,用于模拟实际银行的各种操作,如开户、存款、取款、转账等。这种类型的项目可以帮助初学者更好地理解面向对象编程(OOP)的概念...

Global site tag (gtag.js) - Google Analytics