Java中的泛型void

3

我有一个返回void的函数

public interface IProductService {
   void delete(String id);
}

通用方法

public interface IRequestHandler<C , R> {
    R handler(C c);
    Class<C> commandType();
}

通用接口的实现

 @Singleton
    public record DeleteProductCommandHandler(IProductService iProductService)
            implements IRequestHandler<DeleteProductCommand, Void> {


        @Override
        public Void handler(DeleteProductCommand deleteProductCommand) {
            return iProductService.delete(deleteProductCommand.id);
        }

        @Override
        public Class<DeleteProductCommand> commandType() {
            return DeleteProductCommand.class;
        }
    }

我该如何在 IRequestHandler<DeleteProductCommand, Void> 中使用void,以便将iProductService.delete(deleteProductCommand.id);中的void进行映射?


1
使handler方法包含两个语句:1)简单的iProductService.delete(...);2)和return null; - terrorrussia-keeps-killing
真的吗?null 是返回类型吗? - San Jaisy
7
Null不是返回类型,而是Void。但是Void只有一个可能的值——null。所以你要返回的就是它。你可以通过其他基本类型的包装类类比来理解这一点。例如,Integer对应于每个int类型的值都有一个相应的值,再加上特殊的值null。所有基本类型的包装类都是如此。由于void没有任何值,因此Void具有所有(没有)这些值,加上null - Brian Goetz
3
Integerint类型的相应引用类型。对于每个int值(共2^32个),都有一个相应的Integer值,此外Integer还可以取值为nullVoidvoid类型的相应引用类型。对于每个void值(共零个),都有一个相应的Void值,此外Void也可以取值为null。因此,nullVoid唯一有效的取值。如果想要能够返回任何类型的值,请将返回类型设为Object - Brian Goetz
显示剩余3条评论
1个回答

3

选项1:

只需返回null

@Override
public Void handler(DeleteProductCommand deleteProductCommand) {
    iProductService.delete(deleteProductCommand.id);
    return null;
}

选项2:

更新IProductService :: delete方法以返回有意义的内容,例如像Collection::remove一样返回一个boolean值:

public interface IProductService {
   boolean delete(String id);
}

@Singleton
public record DeleteProductCommandHandler(IProductService iProductService)
            implements IRequestHandler<DeleteProductCommand, Boolean> {

    @Override
    public Boolean handler(DeleteProductCommand deleteProductCommand) {
        return iProductService.delete(deleteProductCommand.id);
    }

    @Override
    public Class<DeleteProductCommand> commandType() {
        return DeleteProductCommand.class;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接