Java 如何对回调接口的实现类隐藏泛型类型参数

Java 如何对回调接口的实现类隐藏泛型类型参数,java,android,Java,Android,我正在Android上编写一个API,该API将由现有应用程序使用,我将调用客户端。有很多客户端代码,我真的不想修改它。现在API实现了一个回调方法作为接口。为了避免编写大量锅炉板代码,我决定使用泛型和可扩展类。这个设计决策使我的API的回调接口使用泛型。反过来,这会导致编译器将客户端标记为需要指定实现回调的类型参数。我不想让客户端不得不使用类型参数。实际上,我希望屏蔽客户端代码,使其不必指定类型,并希望防止客户端指定错误的类型 以下是一个例子: 封装基本功能的可扩展API类示例: public

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

以下是一个例子:

封装基本功能的可扩展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);
   }
}
客户机代码示例(这是编译器希望看到的):

public类ClientView扩展活动实现回调{
文本视图mTextView;
onCreate(){
//假设这里有正常的设置代码
新示例API(this.doSomething();
}
onCallback(字符串响应){
mTextView.setText(响应);
}
}

有什么想法吗?这有意义吗?

在我看来,你似乎有着相互竞争的目标,而解决办法就是将混乱转移到其他地方

如何实现中间类型隐藏接口,如StringCallback:

interface StringCallback extends Callback<String>
接口StringCallback扩展了回调
或者更粗暴地说,你可以用一个物体遮住它:

interface ObjCallback extends Callback<Object>
接口ObjCallback扩展回调
然后ClientView将实现这些接口中的一个,最终您的基本API人员应该会感到高兴,并且您的客户机代码不必携带泛型


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

编译器消息只是一个警告。暂时忽略它。老实说,我只是想通过不必回去更改客户端代码来节省一些时间。我的项目在一个非常紧迫的截止日期。我从OP的描述推断,当前的客户端代码只使用一个接口名称,他不想更改现有的引用?这个如何:接口OrigCallback扩展回调;这应该保持客户端代码不被修改。
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 extends Callback<String>
interface ObjCallback extends Callback<Object>