在Send
impl<T> Send for LinkedList<T>
where
T: Send,
特征中,我看到了两者
impl<T: Send> Send for LinkedList<T>
和
impl
这两种语法有什么区别,如果我为自己的特性编写RestTemplate tpl = new RestTemplate();
/*
* http://bugs.java.com/view_bug.do?bug_id=7157360
* As long as we are using java 7 we cannot expect output for delete
* */
HttpHeaders headers = new HttpHeaders();
headers.add("X-HTTP-Method-Override", "DELETE");
HttpEntity<Collection<String>> request = new HttpEntity<Collection<String>>(payload, headers);
ResponseEntity<String> exchange = tpl.exchange(uri, HttpMethod.POST, request, String.class);
声明,它会对我的代码产生什么影响?
答案 0 :(得分:8)
where
子句中定义的特征边界是内联声明的特征边界的超集。内联样式存在于where
子句之前; where
条款为introduced in RFC 135:
添加
where
条款,这些条款提供了更具表现力的方式 指定特征参数边界。 [...]现有的边界符号 将继续作为where
条款的语法糖。
以下是当前边界语法的限制列表 克服了where语法:
除了类型参数之外,它不能表达任何边界。因此,如果在
T
中有一个泛型函数,则可以编写T:MyTrait
声明T
必须实施MyTrait
,但您不能 写Option<T> : MyTrait
或(int, T) : MyTrait
。这些形式较少 通常需要但仍然很重要。它不适用于关联类型。这是因为没有空间来指定关联类型的值。其他 为此目的,语言使用where子句(或类似的东西)。
这很难阅读。经验表明,随着边界数量的增加,当前语法变得难以阅读和 格式。
此后,您还可以在for <'a> ...
子句中使用排名更高的特征界限(where
):
fn foo<T, U>()
where
// higher-ranked trait bounds
for<'a> T: SomethingElse<'a>,
// Bound not directly on the generic type
i32: From<U>,
T: Iterator,
// Bound on an associated type
T::Item: Clone,
// Just really long
U: ReallyLong + AnotherReallyLong + WowReallyLong,
{}
如果内联特征界限可以满足您的需求,那么对您的代码没有任何影响。如果您需要仅where
启用的额外功能,则需要使用where
。
我的个人风格是始终使用where
表单。添加新边界时,单个形状也更容易git diff
,这对我来说是值得的额外代码。
答案 1 :(得分:1)
where
clause documentation现在包括示例:
当分别指定泛型类型和范围时,会更清楚:
impl <A: TraitB + TraitC, D: TraitE + TraitF> MyTrait<A, D> for YourType {}
// Expressing bounds with a `where` clause
impl <A, D> MyTrait<A, D> for YourType where
A: TraitB + TraitC,
D: TraitE + TraitF {}
shepmaster提到:
我的个人风格是始终使用where形式。
添加新的边界时,拥有一个单一的形状(更容易git diff
)对我来说是值得的额外代码行。
我同意,考虑到Git 2.23(2019年第三季度)将为其功能名称和单词增加锈迹 边界。
请参见commit 33be7b3的Johannes Sixt (j6t
)(2019年5月30日)。
请参见commit d74e786的Marc-André Lureau (``)(2019年5月16日)。
(由Junio C Hamano -- gitster
--在commit a41dad4中合并,2019年6月21日)
userdiff:添加防锈的内置图案
这为非常流行的编程语言Rust添加了
xfuncname
和word_regex
模式。
它还包括xfuncname
正则表达式(t4018)的测试用例和更新的文档。