是什么意思<s extends =“”t =“”> save(S实体);在Spring Repository中?

时间:2017-01-31 14:59:55

标签: java spring generics repository spring-data

在Spring Data项目中,CrudRepository为正在管理的实体类提供了复杂的CRUD功能。

T save (T entity);

总的来说,我知道&#34; S扩展了T&#34;意味着,即S,保存操作的返回类型,必须是T的子类型。为什么有必要添加诸如约束?我认为这样做会很好:

void delete(T entity);

cat /home/configuration/configs.txt > /sys/bus/iio/devices/device3/config

我已经用谷歌搜索了更多的帮助,我已经在stackoverflow本身上发现了以下问题,但它对我来说并不是很清楚:

Spring CrudRepository: why to invent a new generic type S

谢谢。

1 个答案:

答案 0 :(得分:12)

如果你想把它作为

T save (T entity);

然后,您可以分配结果的唯一变量必须是T类型。

所以,如果您有CrudRepository<Animal,AnimalID> repository,那么

Dog dog = getDog();
Dog savedDog = repository.save(dog);

您收到编译错误 - 您无法将结果分配给Dog,因为它必须是T类型,在这种情况下,{{1} }。

您需要检查返回的值是否确实属于Animal类型,如果是,请将其强制转换为Dog以将其放入Dog

使用声明,这意味着您可以将其分配给与原始参数相同类型的变量,因为类型解析将允许。

声明本身并没有说明如何保存狗的非动物部分。它所做的就是允许将结果分配回savedDog,如果它原来是Dog