在Spring Data项目中,CrudRepository为正在管理的实体类提供了复杂的CRUD功能。
public interface CrudRepository<T, ID extends Serializable>
extends Repository<T, ID> {
<S extends T> S save(S entity);
T findOne(ID primaryKey);
Iterable<T> findAll();
Long count();
void delete(T entity);
boolean exists(ID primaryKey);
// … more functionality omitted.
}
一般来说,我知道“S扩展T”的含义,即S,save操作的返回类型,必须是T的子类型。为什么需要添加约束之类的内容?我认为这样做很好:
T save (T entity);
如中所示
void delete(T entity);
我在google上找到了更多的帮助,我找到了关于stackoverflow本身的以下问题,但我并不清楚:
Spring Crudepository:为什么要发明一种新的泛型S
谢谢你。
如果你把它当作
T save (T entity);
那么,您可以将结果分配给的唯一变量必须是T类型。
所以,如果你有一个CrudRepository
Dog dog = getDog();
Dog savedDog = repository.save(dog);
你会得到一个编译错误-你不能将结果分配给狗,因为它必须是t型的,在这种情况下是动物型的。
您需要检查返回的值是否确实属于狗的类型,如果是,请将其强制转换为狗,将其放入savedDog。
声明保持原样意味着可以将其分配给与原始参数类型相同的变量,因为类型解析将允许这样做。
声明本身并没有指定如何保存狗的非动物部分。它所做的只是允许将结果分配回
Dog
,如果它最初是Dog
。
问题内容: ~~~~ 在Spring Data项目中,CrudRepository为正在管理的实体类提供复杂的CRUD功能。 通常,我知道“ S扩展T”的含义,即保存操作的返回类型S必须是T的子类型。为什么必须添加诸如约束?我认为这样做是可以的: 如 谢谢。 问题答案: ~~~~ 如果你要拥有它 然后,您可以将结果分配给的唯一变量必须是type 。 因此,如果您有一个,并且您有 您会遇到编译错误-
问题内容: 我是Go的新手,在浏览其他一些线程时遇到了以下代码行: 含义是什么?它是否指定将在if条件中分配某些内容(因为err似乎正在发生这种情况)?我在Wiki上找不到这种语法的示例,并且我很好奇它的用途。 问题答案: 因为返回两个值,所以如果需要它们中的任何一个,都必须在某个地方接收这些值。该是一个占位符,基本的意思是“我不关心这个特殊的返回值。” 在这里,我们只关心检查错误,而无需对实际的
这个正则表达式什么意思?这里$1代表什么?
问题内容: 这个头衔看起来并不那么疯狂。我承诺!! 在研究另一个问题时,我在Stack Overflow的样式表中注意到以下内容: 这是一种奇怪的条件样式吗?这是一个错误吗?假设这不是一个错误,那么它适用于所有IE版本吗?有没有一种方法可以指定给定规则仅适用于大于(例如7)的IE版本? 我以前从未遇到过-我一直在使用条件注释来表示IE特定的样式(以及其价值,我宁愿将所有IE特定样式完全分开)。 问
问题内容: 我有一个类似于以下的简单代码,并将其作为节点模块执行: 我知道这是默认上下文(例如在浏览器中),但是关键字指的是什么? 问题答案: (在模块的上下文中)与node.js中的相同。但是,通常应该使用/ 代替,这样可以清楚地清除正在修改的内容。
问题内容: 在Python中是什么意思?下面的代码有什么作用? 例如… 问题答案: 这是一种字符串格式语法(它是从C借用的)。 请参阅“ PyFormat”: Python支持将值格式化为字符串。尽管这可能包含非常复杂的表达式,但最基本的用法是使用占位符将值插入字符串。 编辑: 这是一个非常简单的示例: 该令牌允许我插入(和潜在的格式)的字符串。请注意,令牌被替换为符号后传递给字符串的任何内容。还