`
dongmingj
  • 浏览: 10106 次
文章分类
社区版块
存档分类
最新评论

JAVA通过反映方法实现C#的委托

阅读更多

C#委托实现了类内部的方法暴露给调用者,类似C++中的方法指针,方法以返回值的形式传递。这种设计方式可以实现统一方法名。

import java.util.*;
import java.lang.reflect.*;

interface Command {
	Method executeMethod();
}

class StartComputer implements Command {
	Class classType = StartComputer.class;
	public Method executeMethod() {
		try {
			return classType.getMethod("innerMethod", new Class[]{ int.class });
		} catch(NoSuchMethodException e) {
			e.printStackTrace();
			return null;
		}
	}

	public void innerMethod(int param) {
		// TODO: something.
		System.out.println("----------------- OUTPUT ------------------");
		System.out.println(param);
	}
}

public class CommandStudy {
	public static Map<String, Class> commandMap = new HashMap<String, Class>();
	static {
		commandMap.put("StartComputer", StartComputer.class);
	}
	public static void main(String[] args) throws IllegalAccessException, InstantiationException , InvocationTargetException{
		Class startComputerClass = commandMap.get("StartComputer");
		Command someCommand = (Command)startComputerClass.newInstance();
		Method executeMethod = someCommand.executeMethod();
		executeMethod.invoke(someCommand, new Object[] { new Integer(200) });
	}
}

 Command类是公共接口类,对外开放的接口方法。StartCommand实现一个Command接口。在StartCommand的executeMethod方法的内部实现了方法的转移,把StartCommand里其它方法转移到接口方法executeMethod里,这样设计后,统一方法接口。

 

C#中委托对象delegate与JAVA中Method对象主要区别在于delegate里包含方法的对象,而Method主要是对方法的描述,不包含任务对象信息。

JAVA中用invoke方法时可能会产生大量的异常。

0
0
分享到:
评论

相关推荐

    C#与JAVA的比较

    ### C#与JAVA的比较 #### 相同之处 ...这些差异反映了C#和JAVA在设计理念上的不同,也体现了两者在解决实际开发问题时所采取的不同策略。了解这些异同点对于选择合适的语言来满足特定项目需求至关重要。

    C#和JAVA的区别总结

    Java通过自定义监听器实现事件,而C#使用委托来定义和处理事件,更加简洁。 10. 运算符重载: C#支持运算符重载,要求为类的静态方法,Java不支持。 11. 异常处理: C#没有Java的throws关键字,异常处理更灵活...

    C#面试题(带答案)

    这里我们关注的是三个核心知识点:`new`与`override`的区别、`virtual`关键字的作用以及.NET框架中委托实现的事件模型与Java中接口实现事件模型的区别。 1. `new`与`override`的区别: - `new`运算符主要用于隐藏...

    c#语言定义

    2. **委托和事件**:C#引入了委托(delegate)类型,用于表示方法的引用,这在处理事件时特别有用,而Java使用接口来模拟类似的功能。 3. **泛型**:C#支持泛型,允许在类和方法中使用类型参数,提高了代码的灵活性...

    宿舍管理系统课程设计报告(C#).pdf

    2. **公共语言运行库(CLR)**:CLR将C#代码编译为中间语言(IL),然后在运行时通过JIT(Just-In-Time)编译转化为平台特定的机器代码,类似于Java的字节码机制。 3. **C#基础**:C#的基本语法包括命名空间、数据类型...

    2021春招C#.NET笔试题基础篇.pdf

    在C#中,不存在final关键字,该关键字在Java中用于防止类被继承或方法被重写。 finally是C#中异常处理的一部分,finally块内的代码无论是否发生异常都会被执行,通常用于清理资源。 简述C#成员修饰符: C#中的成员...

    C#计算器

    【C#计算器】是一个使用C#编程语言实现的软件项目,它允许用户通过键盘输入来进行基本的数学计算。这个计算器程序展示了C#的基础语法、控制流、运算符使用以及图形用户界面(GUI)的设计。在深入讲解这个项目的知识...

    英语听力测试英语听力测试小软件(C#)

    C#(读作“看井”)是微软公司开发的一种面向对象的编程语言,它继承了C++和Java的优点,并在.NET框架的支持下广泛应用于Windows平台的应用程序开发。利用C#的特性,开发者可以创建出交互性高、功能丰富的桌面软件,...

    C#面试问答汇总

    - **Override**:实现方法重写,即子类重新定义父类的方法,要求方法签名完全相同。 - **Overload**:实现方法重载,即在同一类中定义多个同名方法,但参数列表不同。 #### 14. ASP.NET中Session、Cookie、...

    C#命名规范 C#规范文档

    - **规则3-3**:为了提高代码的组织性和可读性,应将具有相同访问修饰符或功能的方法放在一起,通常公共方法或实现接口的方法应放在前面。 #### 4. 属性的命名规则 - **规则4-1**:属性名应使用名词,并采用...

    多家著名企业的面试题目

    这些题目涵盖了C#、Web开发、.Net框架以及JAVA等核心技术领域,反映了当前IT行业对专业人才的需求和期望。 【C#知识点】 C#是一种由微软开发的面向对象的编程语言,广泛应用于Windows平台的应用程序开发和游戏制作...

    线程与委托

    在C#中,委托是类型安全的,意味着只能用于调用具有匹配签名的方法。在UI编程中,委托常用于异步操作,因为它们允许我们在一个线程上启动操作,然后在另一个线程上处理结果,确保UI线程始终保持响应。 在Eclipse...

    mit.foundation.of.object.oriented

    《MIT基金会:面向对象编程语言》是一本专为学习...通过阅读《MIT基金会:面向对象编程语言》,读者将深入理解面向对象编程的核心概念,并掌握如何在C#、Java和VB.NET中应用这些概念,为后续的软件开发打下坚实的基础。

    C#编程规范

    - **5-2** 方法命名应清晰反映其功能。 - **5-3** 保持方法内部逻辑的一致性。 - **5-4** 使用英文命名变量和方法,以便于跨文化团队合作。 **6. 设计模式:** - **6-1** 系统设计应采用合适的设计模式。 **7. ...

    YNC-2021-SoftwareContents-Clouding:该存储库是我关于C,Python,Java,C#的大学课程的个人实践

    在“YNC-2021-SoftwareContents-Clouding”这个项目中,我们可以看到一个学习者对于编程语言的深入探索,主要包括C、Python、Java和C#四种编程语言。这是一份个人实践的资料库,反映了作者在大学课程中的学习过程和...

    最新2020程序员实习日记范文6篇.docx

    6. **C#编程**:实习生还接触到了C#编程,完成了面试后的一个小任务,包括界面设计、数据操作、冒泡排序和堆排序的实现。他还通过封装和XML配置增强了程序的功能,使用简单工厂模式提高了代码的可扩展性。 7. **XML...

    自定义图标工具栏

    同样,事件处理和行为定义也是通过绑定`Click`事件和实现对应的委托方法来完成。 在移动应用开发中,如Android,我们可以通过`android.widget.Toolbar`类来创建自定义工具栏。每个图标通常是一个`MenuItem`,通过`...

    30天的代码:用C ++,C#,F#,Go,Java,JavaScript,Python,Ruby,Swift和TypeScript的HackerRank Solutions解决30天的代码。 PR欢迎您! :grinning_face_with_smiling_eyes:

    通过挑战,你将深入理解C#的类、接口、委托、事件等概念,以及LINQ(Language Integrated Query)的使用。 3. **F#**:作为函数式编程语言,F#结合了命令式、声明式和面向对象编程的特点。挑战中,你会接触到函数、...

    Scripts-2.0

    C#支持类、接口、继承、多态等面向对象概念,还引入了委托、事件、匿名方法和lambda表达式等高级特性,使得代码更易读、更易于维护。 在"Scripts-2.0"项目中,C#的这些特性得到了充分的应用。项目的核心部分很可能...

Global site tag (gtag.js) - Google Analytics