我创建了一个接口来抽象2个类的常用方法,这里是代码
const attr = dictionary.test.klass.attr;
// but no id because declared type of `klass`
// is `Klass` which does not have `id`
const attr = dictionary.test.t1.display;
我有另一个名为ProductResource的文件
package br.canabarro.resource;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Repository;
@Repository
public interface BaseResource<T, ID> {
ResponseEntity save( T entity);
ResponseEntity delete(ID id);
ResponseEntity getAll();
ResponseEntity getById(ID id);
ResponseEntity update(ID id, T entity);
}
@Override
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity save(@RequestBody DtoProduct productDTO) {
final Product product = new Product(productDTO.getName());
return ResponseEntity.status(HttpStatus.ACCEPTED).body(productService.save(product));
}
方法是在这个函数上实现的,但编译器返回方法不会覆盖其超类的方法,但如果我将函数参数更改为save
将传递,类Product productParam
对参数有Product
和id
。
最后一部分是我的name
,此方法还实现了一个名为ProductToDto
SuperConverter
如何更改package br.canabarro.dto.Conversor;
import br.canabarro.dto.DtoProduct;
import br.canabarro.entity.Category;
import br.canabarro.entity.Product;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class ProductToDto implements SuperConverter<Product, DtoProduct> {
@Override
public DtoProduct apply(Product product) {
List<String> categoriesID = product
.getCategories()
.stream()
.map(Category::getId)
.collect(Collectors.toList());
return DtoProduct
.build()
.id(product.getId())
.name(product.getName())
.builder();
}
}
以使java了解我想要的是传递模板BaseResoucer
而不是像T
这样的类名。
对不起,如果问题变得那么长,但这对我来说是一个重要的问题。
在pastebin上我发布了DtoProduct
和SuperConverter
DtoProduct
:https://pastebin.com/TmFRLQVz
SuperConverter
:https://pastebin.com/VTSnMVhq
答案 0 :(得分:0)
ProductResource定义为:
public class ProductResource implements BaseResource<Product, String>
所以Product在BaseResource中成为你的T.在这种情况下,期望ProductResource实现以下方法:
ResponseEntity save(Product entity);
它没有那样做。
您需要将ProductResource定义为:
public class ProductResource implements BaseResource<DtoProduct, String>
或者如果您想将其保留为Product,请执行以下方法:
ResponseEntity save(Product entity);
这不是Spring问题,而是Java泛型。看看https://docs.oracle.com/javase/tutorial/java/generics/index.html