回调函数例子(结构)--已测试

本文通过一个具体的C语言程序实例介绍了如何使用结构体来存储函数指针,并展示了如何通过这些函数指针调用不同的字符串生成函数。文章首先定义了一个包含函数指针的结构体,然后实现两个函数用于生成特定的字符序列,最后在main函数中通过结构体成员调用这些函数。

#include <stdlib.h>
#include <stdio.h>
int MyTest1()
{
   int i;
   for (i=0; i<30; i++)
   {
     printf("The %d th charactor is: %c/n", i, (char)('a' + i%26));
   }
   return 0;
}

int MyTest2(int num)
{
   int i;
   for (i=0; i<num; i++)
   {
    printf("The %d th charactor is: %c/n", i, (char)('a' + i%26));
   }
   return 0;
}

struct TestStruct
{
 int (*test1)();
 int (*test2)(int n);
 int (*test3)();
};
struct TestStruct MyTestStruct=
{
 MyTest1,
 MyTest2,
 NULL
};

struct TestStruct *get_test_ops(void)
{
 return &MyTestStruct;
}


int main()

{
   printf("************************/n");
   TestStruct* my=get_test_ops();;
   my->test1();
   my->test2(30);
   return 0;
}

### Java回调函数示例 为了展示Java中的回调机制,下面提供了一个完整的例子。此案例涉及三个主要部分:接口定义、具体实现类以及调用者。 #### 定义回调接口 首先创建一个名为`CallBackInterface`的接口,其中声明了抽象方法`process`用于接收列表并返回对象作为处理结果: ```java public interface CallBackInterface { Object process(List<String> list); } ``` #### 实现回调接口的具体逻辑 接着,在另一个类中实现上述接口的方法。这里以`MyCallbackImpl`为例,该类实现了具体的业务逻辑,比如遍历接收到的数据集合并对每项执行特定操作: ```java import java.util.List; public class MyCallbackImpl implements CallBackInterface { @Override public Object process(List<String> stringList) { StringBuilder result = new StringBuilder(); for (String item : stringList){ result.append(item).append(", "); } // 去除最后一个逗号和空格 if(result.length() > 0){ result.setLength(result.length()-2); } return result.toString(); } } ``` #### 使用回调机制 最后一步是在处理器类里利用之前准备好的组件完成实际的任务。在这个场景下就是`WorldListHandler`类,它负责初始化数据结构并将这些信息传递给任何实现了`CallBackInterface`的对象来进行进一步的操作[^1]。 ```java import lombok.Data; import java.util.ArrayList; import java.util.List; @Data public class WorldListHandler { private List<String> stringList = new ArrayList<>(); /** * 执行回调方法 */ public void execute(CallBackInterface callBackInterface){ Object processedResult = callBackInterface.process(stringList); System.out.println("Processed Result: " + processedResult); } /** * 添加元素到列表中以便测试 */ public void addItems(){ this.stringList.add("Item1"); this.stringList.add("Item2"); this.stringList.add("Item3"); } } ``` 当实例化以上各个组成部分之后就可以看到如何通过回调的方式让不同的模块之间相互协作而不必关心对方内部是如何工作的[^2]。 为了让这段代码正常工作,还需要编写一段简单的主程序来连接所有的片段,并观察最终效果: ```java public class MainApp { public static void main(String[] args) { // 创建处理器对象 WorldListHandler handler = new WorldListHandler(); // 向列表添加一些项目供后续处理 handler.addItems(); // 构建回调实现体 CallBackInterface callback = new MyCallbackImpl(); // 调用execute方法触发回调行为 handler.execute(callback); } } ``` 这样就完成了整个流程的设计与编码,展示了Java环境下典型的回调模式应用方式[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值