从单个构造函数参数推断通用类类型参数

舞会85

我想要的是以下内容:

在大多数情况下,泛型类将类似于TestBuilder<X, X>,这意味着T和O是同一类型。因此,我创建了两个不同的构造函数。我想拨打新的匿名电话,例如new TestBuilder<>(...)(我在<>这里匿名)。

存在以下4个构造函数示例:

1)工作构造函数调用

// Anonoumous, working
new TestBuilder<>(String.class, Integer.class)
    .withOnNext(new Action1<Integer>()
    {
        @Override
        public void call(Integer integer)
        {   
        }
});

// not anonoumous, classified, working
new TestBuilder<String, String>(String.class)
    .withOnNext(new Action1<String>()
    {
        @Override
        public void call(String string)
        {
        }
});

2)有问题或无法正常进行的构造函数调用

// Anonoumous and working
// PROBLEM: withOnNext is called with Object instead of String
new TestBuilder<>(String.class)
    .withOnNext(new Action1<Object>()
    {
        @Override
        public void call(Object o)
        {
        }
});

// Anonoumous and NOT working
// this is what I want to work!
new TestBuilder<>(String.class)
    .withOnNext(new Action1<String>()
    {
        @Override
        public void call(String string)
        {
        }
});

问题

有没有办法让第4个构造函数起作用?如果只用一个参数调用构造函数,我不想被迫给它两个类,在这种情况下,第二个泛型类应该从第一个泛化到“继承”……而不必写,new TestBuilder<String, String>(String.class)我想写new TestBuilder<>(String.class)或至少new TestBuilder<String>(String.class)...

班级

这是测试构建器类的外观:

public class TestBuilder<T, O>
{
    public TestBuilder(Class<T> eventClass)
    {
        this(eventClass, (Class<O>)eventClass);
    }

    private TestBuilder(Class<T> eventClass, Class<O> observableClass)
    {
        init();
    }

    public TestBuilder<T, O> withOnNext(Action1<O> actionNext)
    {
        mActionNext = actionNext;
        return this;
    }
}
米菲特

我认为Java不能在没有某种暗示的情况下推断出第二种泛型类型。一种方法是在变量声明中提供类型:

 TestBuilder<String, String> testBuilder = new TestBuilder<>(String.class);
 testBuilder.withOnNext(new Action1<String>() {
     @Override
     public void call(String string) {
         //...
     }
 });

但是您仍然需要声明两个通用参数。

我要做的是在静态工厂方法中将两者TO相同的信息封装起来

public  class TestBuilder<T, O> {
    public static <T> TestBuilder<T, T>  create(Class<T> eventClass) {
        return new TestBuilder<T, T>(eventClass);
    }
    // ...
}

然后这样称呼它:

TestBuilder.create(String.class).withOnNext(...);

另一个选择是将信息封装在继承自的单独的类中TestBuilder

public class SimpleTestBuilder<T> extends TestBuilder<T,T> {
    public SimpleTestBuilder(Class<T> eventClass) {
        super(eventClass, eventClass);
    }
}

public class TestBuilder<T, O> {
    private TestBuilder(Class<T> eventClass, Class<O> observableClass) {
    }
    // ...
}

用作

    new SimpleTestBuilder<>(String.class).withOnNext(...);

另一个不错的选择是封装信息O,就像T在静态方法中一样:

public  class TestBuilder<T, O> {
    public static <T> TestBuilder<T, T>  create(Class<T> eventClass) {
        return new TestBuilder<T, T>(eventClass);
    }
    // ...
}

用作

TestBuilder.create(String.class).withOnNext(...);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

类型构造函数参数推断

来自分类Dev

无法推断通用类的类型参数

来自分类Dev

TypeScript:从错误的参数推断出通用函数类型参数

来自分类Dev

推断通用类中的参数类型,这些参数类型是所提供参数的嵌套通用类型

来自分类Dev

从函数参数推断类型参数

来自分类Dev

从可选构造函数参数的返回类型推断类型

来自分类Dev

是否可以从 Typescript 中的非构造函数方法参数推断泛型类类型?

来自分类Dev

构造函数作为参数:推断类的泛型为函数

来自分类Dev

从参数动态推断通用方法的类型参数

来自分类Dev

typescript 类构造函数参数推断为 any

来自分类Dev

让非通用类在构造函数中接受通用参数

来自分类Dev

通过多个派生类传递类型参数以在通用静态构造函数中使用

来自分类Dev

在另一个通用类中用作类型参数时,无法推断通用类型

来自分类Dev

具有类的Haskell函数参数类型推断

来自分类Dev

将参数传递给通用Class类型的构造函数

来自分类Dev

通用功能参数的类型推断

来自分类Dev

在Scala中推断通用类型参数

来自分类Dev

带有静态方法的Typescript通用类构造函数参数

来自分类Dev

TypeScript:将此多态并推断通用函数参数

来自分类Dev

Java 8类型推断-如何对通用构造函数进行简化?

来自分类Dev

如何构造Java通用类以接受非通用构造函数参数

来自分类Dev

高阶函数参数类型的类型推断错误

来自分类Dev

从函数返回类型推断模板参数类型

来自分类Dev

缺少通用类的类型参数

来自分类Dev

如何使用 kotlinpoet 生成具有单个类型参数的 Kotlin“Unit”类型的构造函数参数?

来自分类Dev

无法推断通用参数的参数

来自分类Dev

检测在类构造函数中传递的参数类型

来自分类Dev

从超级调用推断类参数类型

来自分类Dev

为什么Scala无法为具有多个参数列表的函数推断通用返回类型?

Related 相关文章

  1. 1

    类型构造函数参数推断

  2. 2

    无法推断通用类的类型参数

  3. 3

    TypeScript:从错误的参数推断出通用函数类型参数

  4. 4

    推断通用类中的参数类型,这些参数类型是所提供参数的嵌套通用类型

  5. 5

    从函数参数推断类型参数

  6. 6

    从可选构造函数参数的返回类型推断类型

  7. 7

    是否可以从 Typescript 中的非构造函数方法参数推断泛型类类型?

  8. 8

    构造函数作为参数:推断类的泛型为函数

  9. 9

    从参数动态推断通用方法的类型参数

  10. 10

    typescript 类构造函数参数推断为 any

  11. 11

    让非通用类在构造函数中接受通用参数

  12. 12

    通过多个派生类传递类型参数以在通用静态构造函数中使用

  13. 13

    在另一个通用类中用作类型参数时,无法推断通用类型

  14. 14

    具有类的Haskell函数参数类型推断

  15. 15

    将参数传递给通用Class类型的构造函数

  16. 16

    通用功能参数的类型推断

  17. 17

    在Scala中推断通用类型参数

  18. 18

    带有静态方法的Typescript通用类构造函数参数

  19. 19

    TypeScript:将此多态并推断通用函数参数

  20. 20

    Java 8类型推断-如何对通用构造函数进行简化?

  21. 21

    如何构造Java通用类以接受非通用构造函数参数

  22. 22

    高阶函数参数类型的类型推断错误

  23. 23

    从函数返回类型推断模板参数类型

  24. 24

    缺少通用类的类型参数

  25. 25

    如何使用 kotlinpoet 生成具有单个类型参数的 Kotlin“Unit”类型的构造函数参数?

  26. 26

    无法推断通用参数的参数

  27. 27

    检测在类构造函数中传递的参数类型

  28. 28

    从超级调用推断类参数类型

  29. 29

    为什么Scala无法为具有多个参数列表的函数推断通用返回类型?

热门标签

归档