gpt4 book ai didi

java - 如何从回调接口(interface)的实现类中隐藏通用类型参数

转载 作者:行者123 更新时间:2023-12-01 15:29:14 24 4
gpt4 key购买 nike

我正在 Android 上编写一个 API,该 API 将由现有应用程序使用,我将其称为客户端。客户端代码很多,我不太想修改。现在 API 将回调方法实现为接口(interface)。为了避免编写大量样板代码,我决定使用泛型和可扩展类。这个设计决策使我的 API 的回调接口(interface)使用泛型。反过来,这会导致编译器将客户端标记为需要指定实现回调的类型参数。我不想让客户端必须使用类型参数。实际上,我希望阻止客户端代码必须指定类型,并希望防止客户端指定错误的类型。

这是一个例子:

封装基本功能的可扩展 API 类示例:

public abstract class BaseAPI<T> {
Callback mCallBack;

public BaseAPI(Callback<T> callback) {
mCallBack = callback;
}

public void doSomething() {
T response = getResponse();
if (mCallBack != null) {
mCallBack.onCallback(response)
}
}

public abstract T getResponse();

public interface Callback<T> {
public void onCallback(T response);
}
}

扩展 BaseAPI 的示例类:

public class ExampleAPI extends BaseAPI<String> {

public ExampleAPI(Callback<String> callback) {
super(callback):
}

public String getResponse() {
String response = "blah";
return response;
}
}

示例客户端代码(这就是我想要的样子):

public class ClientView extends Activity implements Callback {
TextView mTextView;

onCreate() {
//pretend normal setup code is here

new ExampleAPI(this).doSomething();
}

onCallback(String response) {
mTextView.setText(response);
}
}

示例客户端代码(这是编译器希望它看起来的样子):

public class ClientView extends Activity implements Callback<String> {
TextView mTextView;

onCreate() {
//pretend normal setup code is here

new ExampleAPI(this).doSomething();
}

onCallback(String response) {
mTextView.setText(response);
}
}

有什么想法吗?这有道理吗?

最佳答案

在我看来,你们有相互竞争的目标,而解决方案就是简单地将困惑转移到其他地方。

如何实现中间类型隐藏接口(interface),例如 StringCallback:

interface StringCallback extends Callback<String>

或者更滥用的是,你可以用一个对象来掩盖它:

interface ObjCallback extends Callback<Object>

然后 ClientView 将实现这些接口(interface)之一,最终您的基本 API 内容应该很满意,并且您的客户端代码不必携带泛型。

我不完全确定你为什么要这样做,你的客户端代码应该只指定类型。

关于java - 如何从回调接口(interface)的实现类中隐藏通用类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9764768/

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