0

我收到警告“参数化类 'MapperService' 的原始使用和“未经检查地调用 'mapSourceToBehandlerKrav(T)' 作为原始类型的成员......来自 IntelliJ。我并没有真正掌握泛型的概念,试图弄清楚。但是对这些警告的一些解释和解决方案可能会有所帮助

界面:

public interface MapperService<T> {
    Behandlerkrav mapSourceToBehandlerkrav(T sourceInput) throws DataSourceException, MapperException;
}

实现类:

public class XMLToDomainMapper implements MapperService {

    public Behandlerkrav mapSourceToBehandlerkrav(Object input) throws DataSourceException, MapperException {

        if (!(input instanceof File)) {
            throw new DataSourceException(
                "Input er av ugyldig type: " + input.getClass() + " | tillat type = " + "File");
        }

        // More stuff
    }

调用实现类(出现警告的地方):

public class InnrapporteringServiceImpl implements InnrapporteringService {
    MapperService kildesystemInputMapper; <-- IntelliJ WARNING HERE

    public InnrapporteringServiceImpl(XMLToDomainMapper mapper) {
        this.kildesystemInputMapper = mapper;
    }

    @ServiceActivator(inputChannel = "sftChannel")
    public void init(Message<File> message) {
        // call mapper service
        // call persistence service
        // call reporting service
        var timestamp = message.getHeaders().getTimestamp();

        Behandlerkrav behandlerkrav = kildesystemInputMapper.mapSourceToBehandlerkrav(message.getPayload()); <-- IntelliJ WARNING here
    }
}
4

1 回答 1

1

MapperService接口旨在使用类型进行参数化。

这允许它检查参数 tomapSourceToBehandlerkrav是它期望的类型。

如果您将 XMLToDomainMapper 编写为:

class XMLToDomainMapper implements MapperService<File> {
 ...
}

然后你会在编译时检查传递的参数是 a File,你不需要:

if (!(input instanceof File)) {
            throw new DataSourceException(
                    "Input er av ugyldig type: " + input.getClass() + " | tillat type = " + "File");
        }

正如您在当前实现中所做的那样 - 不可能使用任何不是File.

于 2021-03-03T10:43:29.277 回答