我正在try 使用泛型实现一个简单的方法,该方法首先从存储库中查找特定类型的所有记录,然后调用getId()方法来收集ID,然后打印该类型的所有ID.

我想为不同的类型调用该函数,例如水果/蔬菜/饮料

我的样例代码只适用于一种类型,但我很难在第二种方法中使用泛型,这样我就可以将其用于任何类型,而不仅仅是Fruit.有谁能给我指个方向吗?

void audit() {
    
    printObjectIds(frutisRepository.findAll, Fruit::Id, "Fruits")
    printObjectIds(vegetablesRepository.findAll, Vegetable::Id, "Vegetables")
    printObjectIds(drinksRepository.findAll, Drink::Id, "Drinks")
}

void printObjectIds(Supplier<List<Fruit>> supplier, Function<Fruit, Integer> function, String type) {
    
    List<Integer> objectIds = supplier.get()
        .stream()
        .map(function)
        .toList();

    log.info("Type: {}", code)
    objectIds.forEach(id -> log.info("Items: {}", objectIds))       
}

提前谢谢你

我try 了附加的示例代码并使用类型擦除,但无法使其正常工作

推荐答案

像这样试一试.您需要在方法的左侧声明类型参数,并将其包括在方法参数中.我用唱片做了演示.

只要code等字段可见,您的原始方法内容就可以很好地工作.

public class GenericMethod {
    record Fruit(int Id) {}
    record Vegetable(int Id) {}
    record Drink(int Id) {}
 
    public static void main(String[] args) {
        List<Fruit> fruits = List.of(new Fruit(20), new Fruit(30));
        List<Vegetable> vegetables = List.of(new Vegetable(100), new Vegetable(200));
        List<Drink> drinks = List.of(new Drink(2000), new Drink(3000));
      
        printObjectIds(()->fruits, Fruit::Id, "Fruits");
        printObjectIds(()->vegetables, Vegetable::Id, "Vegetables");
        printObjectIds(()->drinks, Drink::Id, "Drinks");
    }   

    static <T> void printObjectIds(Supplier<List<T>> supplier, Function<T, Integer> function, String type) {
        
        List<Integer> objectIds = supplier.get()
            .stream()
            .map(function)
            .toList();
        System.out.println(objectIds);
         
    }
}

fingerprint

[20, 30]
[100, 200]
[2000, 3000]

Java相关问答推荐

如何让TaskView总是添加特定的列来进行排序?

Saxon 9:如何从Java扩展函数中的net.sf.saxon.expr. XPathContent中获取声明的变量

Javascript在边界中心调整ImageView大小

从技术上讲,OPC UA客户端是否可以通过转发代理将请求通过 tunel 发送到OPC UA服务器?

JUnit—如何模拟局部变量对象方法调用

如何才能使我的程序不会要求两次输入?

蒙蒂霍尔比赛结果不正确

多重延迟签名

PDFBox未加载内容

如何在EXCEL单元格中添加形状和文本

Sack()步骤中的合并运算符未按预期工作

如何在我的世界中为互动增加冷却时间?

EXCEL中的公式单元格显示#NAME?

为了安全起见,有必要复制一份 list 吗?

在线程Java中调用Interrupt()之后调用Join()

RestTemplate Bean提供OkHttp3ClientHttpRequestFactory不支持Spring Boot 3中的请求正文缓冲

Android无法在Java代码中调用Kotlin代码,原因是在Companion中使用Kotlin枚举时

JPA无手术同品种器械可能吗?

如何在JSP中从select中获取值并将其放入另一个select

一条Java记录可以保存多少个字段?