在Java行话中,我有一个接口R
,一个接口RT扩展了R
(其中RT
实现了所有R
)和一系列其他类,它们都实现了RT
。
过渡到生锈,我有两个特点
trait R { ... }
trait RT { ... }
其中RT
是R
的子特征:
impl R for X where X: RT { ... }
接下来,我有一堆结构,所有这些结构都实现了RT:
struct RV { ... }
impl RT for RV { ... }
struct I { ... }
impl RT for I { ... }
struct U { ... }
impl RT for U { ... }
// ...
到目前为止还不错。
现在我希望所有这些结构都可以相互比较,因为它们都实现了RT
。
Java我会将RT
更改为
interface RT extends R, Comparable<RT>
并为equals
和compareTo
添加默认实现。
在《铁锈》中,我不知道是否或如何才能做到这一点。
我可以说trait-RT:PartialEq
,但这只会使一个实现与它本身具有可比性(RV==RV
,而不是RV==U
)。
我的下一个想法是为每个结构添加总体实现:
impl PartialEq<RV> for X where X: RT
impl PartialEq<I> for X where X: RT
// ...
我理解为什么这是不允许的,但是我仍然被我最初的问题困扰着。
我无法将值转换为比较(RV as RT==U as RT
),因为RT
无法生成对象。
我可以手动实现ParatalEq
我考虑过使用宏来生成所有不同的实现,但这感觉太像暴力强迫了,所以我对程序的初始设计提出了质疑。
我如何使所有不同的结构相互比较?
这种模式经常出现在模拟标记联合的Java中,这在Java语言中是缺失的。在Rust中,除非您正在编写一个库,其用户可能需要定义新的RT
实现,否则我怀疑您会更喜欢使用枚举
而不是trait对象:
#[derive(PartialEq, Eq)]
enum AnyRT {
RV(RV),
I(I),
U(U),
}
impl RT for AnyRT {
fn foo(&self, ...) {
match self {
AnyRT::RV(rv) => rv.foo(...),
AnyRT::I(i) => i.foo(...),
AnyRT::U(u) => u.foo(...),
}
}
}
根据您的应用程序,您可能会发现根本不需要RT
特征和/或单独的RV
、I
、U
结构。
我是Resilience4J的新手,并试图与Spring Boot集成。 我的应用程序有几个远程系统调用。我希望所有远程呼叫都有相同的断路器配置。
问题内容: 我有以下接口,我想在类中多次实现: 现在,我希望能够通过以下方式实现此接口: 但是,这给了我错误:在行上: 是否可以使用不同的泛型两次实现接口?如果不是,那么我在这里可以做的下一步工作是什么? 问题答案: 您需要使用内部或匿名类。例如:
问题内容: 提前致谢。感谢您的帮助。 我想比较两个相同类型和结构的任意JToken(NewtonSoft的Json.Net)。 主要目标 是能够使用此方法对两个Json字符串进行排序,以便即使开始时它们具有相同的数据,但顺序不同,最后它们是两个完全相同的字符串。因此排序标准并不重要,重要的是该标准始终相同。并且应该考虑每个小数据元素。 JToken可以是以下几种类型之一:。我没有考虑比较。 获得一
我的办公自动化系统中有以下内容。yaml文件: 它不喜欢“description:”这句话:如果有内部异常,那么内部异常。如果我去掉这个,它就不喜欢“属性:”。我尝试了很多东西,但都不管用。我不明白什么?
我的应用程序需要存储一组与另一个“真实”表具有相同数据库结构的“暂存数据”,但在人工查看暂存数据的内容之前,不能将其写入真实表。这些不仅是对实际表的添加,而且是对它的更新(因此,换句话说,在staging table中,有一些值与实际表具有相同的主键,因为它们引用了相同的实体实例)。 我的方法是让两个JPA对象具有相同的结构(即字段、列名等),但存储在不同的表中,并与Spring透视图完全分开处理
比如我要用一个name字段 比较树状结构里面的所有name字段 包括所有children 看有没有相同的 不知道树状结构里面有多少级 怎么比较, 并且如果过滤掉自己