gpt4 book ai didi

java - 扩展应该不太通用的通用类

转载 作者:行者123 更新时间:2023-12-01 09:22:05 25 4
gpt4 key购买 nike

我正在从数据库中读入 2 个没有共同点的类。每个批处理稍后存储在扩展 ArrayList 的批处理类中现在我需要获取每个批处理中的每个对象,并通过 rabbitMQ 将其​​中的一些字段作为 JSON 发送。

代码:

public class ObjectA {
// Some members and methods
}

public class ObjectB {
// Some members and methods
}

public class BatchA extends ArrayList<ObjectA> {
// Some methods for ObjecetA
}

public class BatchB extends ArrayList<ObjectB> {
// Some methods for ObjectB
}

public class EventClass {

public void sendEvent(final BatchA batch) {
// send over rabbit
}

public void sendEvent(final BatchB batch) {
// same code as above
}
}

为了避免 EventClass 中的代码重复,我为 ObjecetAObjectB 创建了一个接口(interface),并为所有批处理(如下所示)。

代码:

public interface SomeInterface {
String doSomething();
}

public class ObjectA implements SomeInterface {
@Override
public String doSomething() {
return "Hello, world!";
}

public String doSomethingElse() {
return "Goodbye, world!";
}
}

public class ObjectB implements SomeInterface {
@Override
public String doSomething() {
return "Hello universe!";
}

public String justDo() {
return "I'm just doing stuff...";
}
}

public class BasicBatch<T> extends ArrayList<SomeInterface> {
}

public class BatchA extends BasicBatch<ObjectA> {
public void doBatch() {
for (int i = 0; i < size(); i++) {
System.out.println(get(i).doSomethingElse());
}
}
}

public class BatchB extends ArrayList<SomeInterface> {
public void doBatch() {
for (int i = 0; i < size(); i++) {
System.out.println(get(i).justDo());
}
}
}

我明白这是不可能的(这段代码甚至不能编译)——但我不确定这是避免在 EventClass 中一遍又一遍地编写相同方法的最佳方式每个批处理类型

最佳答案

怎么样:

public <T> void sendEvent(final List <? extends T> batch, Function <T, String> toJson) {
batch .forEach (value -> {
String json = toJson (value);
// send over rabbit
});
}

(我在手机上写,语法错误请见谅)

关于java - 扩展应该不太通用的通用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59458874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com