Java 如何将泛型类类型转换为特定类型?

Java 如何将泛型类类型转换为特定类型?,java,generics,project-reactor,Java,Generics,Project Reactor,我正在尝试使用Java8中的泛型类型创建一个Flux泛型转换器。我的代码基于此。这个想法基本上是实现这个特定的转换器String->Integer: public Flux<Integer> createFluxConverterStringToInt(String[] data) { Flux<Integer> stringFlux = Flux .just(data) .map(v

我正在尝试使用Java8中的泛型类型创建一个Flux泛型转换器。我的代码基于此。这个想法基本上是实现这个特定的转换器
String
->
Integer

    public Flux<Integer> createFluxConverterStringToInt(String[] data) {
        Flux<Integer> stringFlux = Flux
                .just(data)
                .map(value -> Integer.parseInt(value))
                .log();
        return stringFlux;
    }
我得到错误:
java.lang.ClassCastException:使用此单元测试时无法将java.lang.String转换为java.lang.Integer

import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;
public class FluxAndMonoGenericTest {
    // this works.
    @Test
    void testCreateGenericFluxWithString() {

        String expect = "Spring,Spring Boot,Reactive Spring";
        String delimiter = ",";
        String[] messages = expect.split(delimiter);

        FluxAndMonoGeneric<String> myFluxGenericTest = new FluxAndMonoGeneric<String>(String.class);

        Flux<String> stringFlux = myFluxGenericTest.createFluxConverter(messages);

        StepVerifier.create(stringFlux)
                .expectNext(messages[0])
                .expectNext(messages[1])
                .expectNext(messages[2])
                .verifyComplete();
    }
    // THIS DOES NOT WORK
    @Test
    void testCreateGenericFluxWithInteger() {

        String expect = "1,1234,7654,34";
        String delimiter = ",";
        String[] messages = expect.split(delimiter);
        Integer[] expectedMessages = new Integer[]{1, 1234, 7654, 34};

        FluxAndMonoGeneric<Integer> myFluxGenericTest = new FluxAndMonoGeneric<Integer>(Integer.class);

        Flux<Integer> stringFlux = myFluxGenericTest.createFluxConverter(messages);

        StepVerifier.create(stringFlux)
                .expectNext(expectedMessages[0])
                .expectNext(expectedMessages[1])
                .expectNext(expectedMessages[2])
                .expectNext(expectedMessages[3])
                .verifyComplete();
    }
}
import org.junit.jupiter.api.Test;
导入reactor.core.publisher.Flux;
进口反应器、测试、步进校验器;
公共类FluxAndMonoGenericTest{
//这很有效。
@试验
void testCreateGenericFluxWithString(){
字符串expect=“弹簧、弹簧靴、反应弹簧”;
字符串分隔符=“,”;
String[]messages=expect.split(分隔符);
FluxAndMonoGeneric myFluxGenericTest=新的FluxAndMonoGeneric(String.class);
Flux stringFlux=myFluxGenericTest.createFluxConverter(消息);
StepVerifier.create(stringFlux)
.expectNext(消息[0])
.expectNext(消息[1])
.expectNext(消息[2])
.verifyComplete();
}
//这行不通
@试验
void testCreateGenericFluxWithInteger(){
字符串expect=“112347654,34”;
字符串分隔符=“,”;
String[]messages=expect.split(分隔符);
整数[]expectedMessages=新整数[]{112347654,34};
FluxAndMonoGeneric myFluxGenericTest=新的FluxAndMonoGeneric(Integer.class);
Flux stringFlux=myFluxGenericTest.createFluxConverter(消息);
StepVerifier.create(stringFlux)
.expectNext(expectedMessages[0])
.expectNext(expectedMessages[1])
.expectNext(expectedMessages[2])
.expectNext(expectedMessages[3])
.verifyComplete();
}
}
公共流量CreateFluxConverterStringPoint(字符串[]数据,函数映射器){
回流通量
.just(数据)
.map(mapper)
.log();
}
然后,您只需传入要将数据转换为正确输出类型的映射器,而不是传入所需的输出类型


例如,
Integer::parseInt
String::trim
或任何东西。

this.typeArgumentClass.isInstance(Integer.class)
应该是
this.typeArgumentClass.equals(Integer.class)
,这样更好。谢谢
import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;
public class FluxAndMonoGenericTest {
    // this works.
    @Test
    void testCreateGenericFluxWithString() {

        String expect = "Spring,Spring Boot,Reactive Spring";
        String delimiter = ",";
        String[] messages = expect.split(delimiter);

        FluxAndMonoGeneric<String> myFluxGenericTest = new FluxAndMonoGeneric<String>(String.class);

        Flux<String> stringFlux = myFluxGenericTest.createFluxConverter(messages);

        StepVerifier.create(stringFlux)
                .expectNext(messages[0])
                .expectNext(messages[1])
                .expectNext(messages[2])
                .verifyComplete();
    }
    // THIS DOES NOT WORK
    @Test
    void testCreateGenericFluxWithInteger() {

        String expect = "1,1234,7654,34";
        String delimiter = ",";
        String[] messages = expect.split(delimiter);
        Integer[] expectedMessages = new Integer[]{1, 1234, 7654, 34};

        FluxAndMonoGeneric<Integer> myFluxGenericTest = new FluxAndMonoGeneric<Integer>(Integer.class);

        Flux<Integer> stringFlux = myFluxGenericTest.createFluxConverter(messages);

        StepVerifier.create(stringFlux)
                .expectNext(expectedMessages[0])
                .expectNext(expectedMessages[1])
                .expectNext(expectedMessages[2])
                .expectNext(expectedMessages[3])
                .verifyComplete();
    }
}