15.4.4 一个通用的Generator

本文展示了一个使用Java泛型的生成器实现示例,通过BasicGenerator类可以创建任意类型的对象实例。具体演示了如何使用该生成器创建CountedObject类的多个实例,并输出其ID。此代码片段为理解Java泛型和工厂模式提供了实践案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class BasicGenerator<T> implements Generator<T> {

    private Class<T> type;

    public BasicGenerator(Class<T> type) {
        this.type = type;
    }

    @Override
    public T next() {
        try {
            return type.newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static <T> Generator<T> create(Class<T> type) {
        return new BasicGenerator<T>(type);
    }

}
public class CountedObject {

    public static long count = 0;
    private final long id = count++;

    public long id() {
        return id;
    }

    public String toString() {
        return "CountedObject_" + id;
    }

}
public class BasicGeneratorDemo {

    public static void main(String[] args) {
        Generator<CountedObject> gen = BasicGenerator.create(CountedObject.class);
        for(int i = 0; i < 5; i++)
            System.out.println(gen.next());
    }

}

Output:

CountedObject_0
CountedObject_1
CountedObject_2
CountedObject_3
CountedObject_4

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 华为移动服务(Huawei Mobile Services,简称 HMS)是一个全面开放的移动服务生态系统,为企业和开发者提供了丰富的工具和 API,助力他们构建、运营和推广应用。其中,HMS Scankit 是华为推出的一款扫描服务 SDK,支持快速集成到安卓应用中,能够提供高效且稳定的二维码和条形码扫描功能,适用于商品扫码、支付验证、信息获取等多种场景。 集成 HMS Scankit SDK 主要包括以下步骤:首先,在项目的 build.gradle 文件中添加 HMS Core 库和 Scankit 依赖;其次,在 AndroidManifest.xml 文件中添加相机访问和互联网访问权限;然后,在应用程序的 onCreate 方法中调用 HmsClient 进行初始化;接着,可以选择自定义扫描界面或使用 Scankit 提供的默认扫描界面;最后,实现 ScanCallback 接口以处理扫描成功和失败的回调。 HMS Scankit 内部集成了开源的 Zxing(Zebra Crossing)库,这是一个功能强大的条码和二维码处理库,提供了解码、生成、解析等多种功能,既可以单独使用,也可以与其他扫描框架结合使用。在 HMS Scankit 中,Zxing 经过优化,以更好地适应华为设备,从而提升扫描性能。 通常,ScanKitDemoGuide 包含了集成 HMS Scankit 的示例代码,涵盖扫描界面的布局、扫描操作的启动和停止以及扫描结果的处理等内容。开发者可以参考这些代码,快速掌握在自己的应用中实现扫码功能的方法。例如,启动扫描的方法如下: 处理扫描结果的回调如下: HMS Scankit 支持所有安卓手机,但在华为设备上能够提供最佳性能和体验,因为它针对华为硬件进行了
使用VBA实现下面的功能: 1. Excel 版本为 2016版,处理大数据量。工作表事件代码与主代码分开显示。 2. 打开的Excel含有History.Cost 和 DataBase 两个工作表,下述History.Cost工作表简称为HC表,DataBase工作表简称为DB表。 3. HC表作为日常操作表格,数据经常会变动。其中第E、F、G、U、W、AF、AI列均为数字输入,空值默认为0,如果有非数字输入则提示报错。 4. DB表作为基础数据表格,只需每次打开工作表的时候加载所需数据即可。 5. HC表的A列和B列进行重复单元格标示,即只要A列和B列区域有重复数据,就用颜色(250,128,114)对重复的单元格进行标示。 6. HC表的A列和B列单元格有新数据录入后,自动更新重复标示功能。 7. 从HC表的第2行开始,判断A列是否有数据,如过有数据,则开始对HC表第2行开始的需要赋值的各列按下列规则赋值 7.1 使用HC表I列的数据对DB表B列进行数据查询 7.2 使用HC表E列的数据对DB表C列进行数据查询 7.3 记录同时符合7.1和7.2规则的DB表D列至R列的数据 7.4 每次点击文件保存按钮时,启动赋值规则。 8. HC表第J列(重量计算)赋值规则: 8.1 计算HC表E列和H列的乘积 8.2 将J列赋值为规则7.3记录数据的DB表D列与规则8.1的乘积 9. HC表第L列(重量单价)赋值规则: 9.1 将L列赋值为规则7.3记录数据的DB表E列数据 10. HC表第M列(材料费用)赋值规则: 10.1 调取规则7.3记录数据的DB表H列数据 10.2 如果规则10.1数据为字符W,M列赋值为HC表J列、K列和L列的乘积 10.3 如果规则10.1数据为字符S,M列赋值为HC表H列、K列和L列的乘积 11. HC表第N列(喷涂单价)赋值规则: 11.1 判断HC表C列内是否含有NPT字符 11.2 判断HC表P列内是否有数值 11.3 如果规则11.1或规则11.2 任一判断为真,则N列赋值为0; 11.4 如果规则11.3不成立,则N列赋值为规则7.3记录数据的DB表F列数据 12. HC表第O列(喷涂费)赋值规则: 12.1 计算HC表第G列除以1000后的值 12.2 如果HC表B列不为空,则运行规则12.3;如果HC表B列为空,则运行规则12.4 12.3 使用HC表B列数据对DB表Y列进行数据匹配,如果有匹配结果,则返回DB表AB列数据,并将HC表O列赋值为规则12.1与DB表AB列数据的乘积。如果没有匹配结果则运行规则12.4 12.4 使用HC表C列数据对DB表Y列进行数据匹配,如果有匹配结果,则返回DB表AB列数据,并将HC表O列赋值为规则12.1与DB表AB列数据的乘积。如果没有匹配结果则运行规则12.5 12.5 如果规则12.3与规则12.4均没有匹配结果,将HC表O列赋值为HC表H列与N列的乘积 13. HC表第T列(激光切割单价)赋值规则: 13.1 将HC表T列赋值为规则7.3记录数据的DB表I列数据 14. HC表第V列(切割费)赋值规则: 14.1 计算HC表T列与HC表U列的乘积 14.2 如果HC表B列不为空,则运行规则14.3;如果HC表B列为空,则运行规则14.4 14.3 使用HC表B列数据对DB表Y列进行数据匹配,如果有匹配结果,则返回DB表AC列数据,并将HC表V列赋值为规则14.1与DB表AC列数据之和。如果没有匹配结果则运行规则14.4 14.4 使用HC表C列数据对DB表Y列进行数据匹配,如果有匹配结果,则返回DB表AC列数据,并将HC表V列赋值为规则14.1与DB表AC列数据之和。如果没有匹配结果则运行规则14.5 14.5 如果规则12.3与规则12.4均没有匹配结果,将HC表V列赋值为规则14.1的计算结果 15. HC表第X列(折弯单价)赋值规则: 15.1 HC表W列大于零,运行此赋值规则 15.2 规定DB表第S列的各行为以下数值500、1000、2000、3000、3200、3300中的任意一个 15.3 如果HC表第F列和G列均有数据,用变量名MAXL记录F列与G列的最大值;否则将HC表X列赋值为0 15.4 使用规则MAXL与规则15.2的所列数值进行比较,并按下列比较规则记录比较结果: 15.4.1 MAXL<=500,记录所有DB表S列数据为500的DB表T列与U列数据 15.4.2 500<MAXL<=1000,记录所有DB表S列数据为1000的DB表T列与U列数据 15.4.3 1000<MAXL<=2000,记录所有DB表S列数据为2000的DB表T列与U列数据 15.4.4 2000<MAXL<=3000,记录所有DB表S列数据为3000的DB表T列与U列数据 15.4.5 3000<MAXL<=3200,记录所有DB表S列数据为3200的DB表T列与U列数据 15.4.6 MAXL>3200,记录所有DB表S列数据为3300的DB表T列与U列数据 15.5 使用HC表的E列对规则15.4所记录数据的DB表T进行数据匹配,匹配成功后返回DB表U列的数据 15.6 HC表X列赋值为MAXL与规则15.5返回数据的乘积 16. HC表第Z列(购买件费用)赋值规则: 16.1 计算HC表第G列除以1000后的值 16.2 如果HC表B列不为空,则运行规则16.3;如果HC表B列为空,则运行规则16.5 16.3 使用HC表B列数据对DB表W列进行数据匹配,如有匹配结果,则HC表Z列赋值为DB表X列数据。如果没有匹配结果,则继续运行规则16.3 16.4 使用HC表B列数据对DB表AA列进行数据匹配,如有匹配结果,则HC表Z列赋值为规则16.1计算数值DB表AB列数据的乘积。如果没有匹配结果,则继续运行规则16.5 16.5 使用HC表C列数据对DB表W列进行数据匹配,如有匹配结果,则HC表Z列赋值为DB表X列数据。如果没有匹配结果,则继续运行规则16.6 16.6 使用HC表C列数据对DB表AA列进行数据匹配,如有匹配结果,则HC表Z列赋值为规则16.1计算数值DB表AB列数据的乘积。如果没有匹配结果,则赋值为0 17. HC表第AC列(焊接单价)赋值规则: 17.1 使用HC表AB列数据对DB表AF列进行数据匹配,HC表AC列赋值为DB表AG列的返回数据 18. HC表第AG列(激光穿孔)赋值规则: 18.1 HC表AG列赋值为规则7.3记录数据的DB表J列数据 19. HC表第AJ列(钳工单价)赋值规则: 19.1 使用HC表AI列数据对DB表K1至R1进行数据匹配 19.2 HC表AJ列赋值为规则19.1所匹配列和7.3记录数据的DB表匹配结果 20. HC表第AL列赋值规则: 20.1 判断HC表C列内是否含有Deck字符,如有则返回规则7.3记录数据的DB表H列的数据;如不含有Deck字符,则赋值为0
07-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值