Java中回调函数的泛型类中的变量数

Java中回调函数的泛型类中的变量数,java,Java,我有一个用于grpc请求的通用类,如下所示: abstract class GenericRunnable<T> { abstract public void callback(T result); } abstract class MyRunnable extends GenericRunnable<String, Integer, String> { ... } 这样的东西可以得到吗?因为每个grpc请求都有不同的返回值,所以最好有这个。例如,一个

我有一个用于grpc请求的通用类,如下所示:

abstract class GenericRunnable<T> {
    abstract public void callback(T result);
}
abstract class MyRunnable extends GenericRunnable<String, Integer, String> {
    ...
}
这样的东西可以得到吗?因为每个grpc请求都有不同的返回值,所以最好有这个。例如,一个请求返回年龄,另一个返回名字和姓氏,等等


另一种方法是为每个
MyRunnable
定义一个
returnClass
,并将其传递给

字符串、整数、字符串
是三个参数,而
GenericRunnable
使用一个参数

把它们归纳成一个类

class ABC {
    private String a;
}
并将该类用作泛型参数

class MyRunnable extends GenericRunnable<ABC> {
    @Override
    public void callback(ABC request) {
        String a = request.getA();
        ...
    }
}
类MyRunnable扩展了GenericRunnable{
@凌驾
公共无效回调(ABC请求){
字符串a=request.getA();
...
}
}

您可以
scala.Tuple22
将参数化输入设置为最多22个参数化类

import scala.Tuple22;
import scala.Tuple3;

abstract class GenericRunnable<T> {
    abstract public void callback(T result);
}

class MyRunnable3Param extends GenericRunnable<Tuple3<String,Integer,String>> { // Class with 3 Parameters

    @Override
    public void callback(Tuple3<String,Integer,String> tuple) {

    }
}
... 
class MyRunnable22Param extends GenericRunnable<Tuple22<String,Integer,String...>> { // Class with 22 Parameters

    @Override
    public void callback(Tuple22<String,Integer,String...> tuple) {

    }
}
导入scala.Tuple22;
导入scala.Tuple3;
抽象类GenericRunnable{
抽象公共无效回调(T结果);
}
类MyRunnable3Param使用3个参数扩展了GenericRunnable{//class
@凌驾
公共无效回调(Tuple3 tuple){
}
}
... 
类MyRunnable22Param使用22个参数扩展了GenericRunnable{//class
@凌驾
公共无效回调(Tuple22 tuple){
}
}

这似乎是不可能的,尽管您可以将一系列类型包装到某个容器或对象中:

public class MyRunnable extends GenericRunnable<Triple<String, Integer, String>> {
    @Override
    public void callback(Triple<String, Integer, String> triplet) {
    ...
    }

    @Override
    public void run() {
    // ...
        callback(new Triple(string1, int1, string2));
    }
}
公共类MyRunnable扩展了GenericRunnable{
@凌驾
公共无效回调(三元组){
...
}
@凌驾
公开募捐{
// ...
回调(新的三元组(string1、int1、string2));
}
}

这看起来像一种命令模式,您的意图是什么?您知道吗?在命令模式中,而不是重写方法,您可以创建对象,该对象将包含更多操作细节。下面是java示例,如果我错了,请纠正我,但这不是我正在做的吗?GenericRunnable是泛型。MyRunnable是命令的特定实现。然后,我将这个runnable传递到一个调用泛型命令execute的类中,并在最后调用它的回调(这就是我在这里看到的)。我遇到的问题是回调可以有多个参数。这是我最后为更复杂的情况所做的,谢谢。这似乎是一个可能的解决方案,但我认为它没有那么灵活,所以我没有使用它。谢谢,但我最终使用了自定义类。
public class MyRunnable extends GenericRunnable<Triple<String, Integer, String>> {
    @Override
    public void callback(Triple<String, Integer, String> triplet) {
    ...
    }

    @Override
    public void run() {
    // ...
        callback(new Triple(string1, int1, string2));
    }
}