首页 > 其他分享 >test4

test4

时间:2024-11-07 09:19:52浏览次数:1  
标签:List test4 子类 void Object 数据类型 data

如果你希望通过一个抽象类来处理不同类型的数据(例如数组和列表),而不想为每种类型创建具体的子类,可以在抽象类中直接实现对不同数据类型的处理逻辑。可以通过检查传入数据的类型来决定如何处理它们。以下是一个可能的设计:

抽象类设计

import java.util.List;

public abstract class AbstractDataProcessor {

    // 处理数据的通用方法
    public final void processData(Object data) {
        if (data instanceof Object[]) {
            processArray((Object[]) data);
        } else if (data instanceof List) {
            processList((List<?>) data);
        } else {
            throw new IllegalArgumentException("Unsupported data type: " + data.getClass());
        }

        generateColumns(); // 生成列(默认实现或子类覆盖)
        generateReport();  // 生成报告(由子类实现)
    }

    // 数组数据处理的具体逻辑
    private void processArray(Object[] data) {
        System.out.println("Processing array data...");
        for (Object obj : data) {
            processDataItem(obj);
        }
    }

    // 列表数据处理的具体逻辑
    private void processList(List<?> data) {
        System.out.println("Processing list data...");
        for (Object obj : data) {
            processDataItem(obj);
        }
    }

    // 处理单个数据项的抽象方法,由子类实现
    protected abstract void processDataItem(Object item);

    // 生成列的通用方法,子类可以覆盖
    protected void generateColumns() {
        System.out.println("Generating default columns...");
    }

    // 抽象方法:由子类实现具体的报告生成逻辑
    protected abstract void generateReport();
}

使用示例

public class ConcreteDataProcessor extends AbstractDataProcessor {

    @Override
    protected void processDataItem(Object item) {
        System.out.println("Processing item: " + item);
        // 实现单个数据项的处理逻辑
    }

    @Override
    protected void generateReport() {
        System.out.println("Generating report for processed data...");
        // 实现报告生成逻辑
    }
}

public class DataProcessorExample {
    public static void main(String[] args) {
        AbstractDataProcessor processor = new ConcreteDataProcessor();

        // 处理数组数据
        Object[] arrayData = {1, 2, 3};
        processor.processData(arrayData);

        // 处理列表数据
        List<Object> listData = List.of("a", "b", "c");
        processor.processData(listData);
    }
}

设计说明

  • 数据类型判断:在 processData 方法中通过 instanceof 判断数据类型,然后调用相应的私有方法处理具体的数据类型。
  • 单个数据项处理:通过 processDataItem 抽象方法,允许子类定义如何处理每个数据项。
  • 列生成和报告生成:提供了默认的列生成方法 generateColumns,可以被子类覆盖。报告生成由 generateReport 抽象方法负责,需要子类实现。

这种设计使得一个抽象类可以处理多种数据类型,而不需要为每种数据类型单独创建子类,从而简化了类的层级结构和代码管理。

标签:List,test4,子类,void,Object,数据类型,data
From: https://www.cnblogs.com/kakaBluce/p/18531505

相关文章

  • pythontest4
    fromcollectionsimportOrderedDictdeflru_simulation(num_blocks,page_sequence):#初始化LRU缓存cache=OrderedDict()#缺页计数器page_faults=0#遍历访问页面序列forpageinpage_sequence:#检查页面是否已在缓存中ifp......
  • vue-test4 -----插槽
    <template><!--<Mainclass="cccc"/><component-a/>--><slot-demo><template#header="slotProps"><p>插槽标题-{{slotProps.msg}}</p></template><template......
  • vue-test4 -------组件之间的数据传递
    <template><h3>CompA</h3><component-b:onfun="dateFun"></component-b><p>{{msg}}</p></template><script>importComponentBfrom"@/components/ComponentB.vue";exportdefault{......
  • webtest / autotest4 / uitest / cypress
    s前端开发:基于cypress的自动化实践,https://www.cnblogs.com/fnng/p/14583259.htmlUI自动化测试框架Cypress介绍和使用, https://www.cnblogs.com/5566yesongqiao/p/16202162.html # 引用官网的介绍语,快速、简单、可靠的在浏览器测试一切的工具。cypress是比较新的一个......
  • test4
    importnet.sf.jsqlparser.parser.CCJSqlParserUtil;importnet.sf.jsqlparser.schema.Table;importnet.sf.jsqlparser.statement.Statement;importnet.sf.jsqlparser.statement.select.PlainSelect;importnet.sf.jsqlparser.statement.select.Select;importnet.sf.j......
  • test4
    test3Markdown示例文件这是一个加粗的文本。这是一个斜体的文本。这是一个删除线的文本。标题H1标题H2标题H3标题H4标题H5标题H6这是一个引用。这是一个内联代码文本。print("这是一个代码块")列表项1列表项2列表项3有序列表项1有序列表项2......
  • test4
    test3Markdown示例文件这是一个加粗的文本。这是一个斜体的文本。这是一个删除线的文本。标题H1标题H2标题H3标题H4标题H5标题H6这是一个引用。这是一......