公共的hasItems(interface iteminterface...items)
这当然不能编译。
导致该问题的示例代码如下:
public interface EntityInterface {
Set<? extends ItemInterface> getItems();
}
@NoArgsConstructor
@AllArgsConstructor
@Data
@With
public class EntityA implements EntityInterface {
private Set<ItemA> items;
}
@NoArgsConstructor
@AllArgsConstructor
@Data
@With
public class EntityA implements EntityInterface {
private Set<ItemA> items;
}
public interface ItemInterface {
String getName();
}
public class ItemA implements ItemInterface {
public String getName() {
return "ItemA";
}
}
public class ItemA implements ItemInterface {
public String getName() {
return "ItemA";
}
}
公共的hasItems(t..items)
但是T在上下文中是不知道的。
公共接口entityinterface
这并没有什么不同。
有没有我错过的解决方案?
正如您所观察到的,问题在于AssertJ使用无效方法创建AbstractEntityInterfaceAssert
类,如:
public S hasItems(interface ItemInterface... items) {/*...*/}
我没有使用AssertJ的实际经验,但经过一些研究,我得到了两个保留编译时类型安全的解决方案(更改EntityInterface.getItems()
方法以返回set<?>
是可行的,但不可接受):
public interface ItemInterface {
String getName();
}
public abstract class AbstractItem implements ItemInterface {
}
public class ItemA extends AbstractItem {
public String getName() {
return "ItemA";
}
}
// ItemB same as ItemA
public interface EntityInterface {
Set<? extends AbstractItem> getItems();
}
@NoArgsConstructor
@AllArgsConstructor
@Data
@With
public class EntityA implements EntityInterface {
private Set<ItemA> items;
}
// EntityB same as EntityA, but with Set of ItemB
public S hasItems(AbstractItem... items) { /*...*/ }
<build>
<plugins>
<plugin>
<groupId>org.assertj</groupId>
<artifactId>assertj-assertions-generator-maven-plugin</artifactId>
<!-- ... -->
<configuration>
<!-- ... -->
<!-- Exclude classes matching the regex from generation -->
<excludes>
<param>com.example.EntityInterface</param>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
以上配置防止生成AbstractEntityInterfaceAssert.java
。
我不知道这些变通方法是否适用于您的用例,不幸的是,我无法提供更好的解决方案或解释(这是AspectJ的bug或限制吗?)。最佳人选是Joel Costigliola--AssertJ的作者
有用的内容:
假设我有一个,我这样做: ...通行证。现在我要检查获得的是否正确:
本文向大家介绍nunit 基本流畅断言,包括了nunit 基本流畅断言的使用技巧和注意事项,需要的朋友参考一下 示例
让我们假设我有一个类,它不实现,还有一个类,它实现。 使用AssertJ的fluent API,我现在假设可以执行以下操作: 由于不实现可比,将返回类型,并且由于也返回,所以我无法访问和方法,这些方法在接口中声明。 'only'返回而不返回有什么原因吗? 当然,我可以按照的内容重写上面的断言,但是表达式本身并不特别易读,而且如果出现故障,生成的消息('expected:<-1>大于:<0>)不会提
我的流在数据库中配置,我的程序不断创建和销毁流。 因此,流配置(例如cron配置)可以随时更改。 这些流是用方法IntegrationFlowContext注册的。使用IntegrationFlowRegistration方法注册并销毁。销毁。 流的运行从第0秒开始,可以在任何一分钟开始。销毁和创建新流从每分钟1秒开始。 这是一个好方法吗?当我测试这个时,它起作用了。但我在想,这是一种很好的方法吗
我使用,并在它停止开发后移到。 最近,我被指向Google repository和另一个断言库(http://Google.github.io/truth/)。 阅读这些示例,我没有发现使用start比使用有任何优势。所以用什么只是品味的问题。但也许我没抓住重点,是吗?
我在我的活动中实现了一个视图寻呼机,在滚动时,将一组数据加载到适配器并将它们显示在列表视图中。一切正常,但我似乎无法找出如何使其更有效,因为滚动时,视图会冻结,但例如在GMAIL应用程序中,当在电子邮件之间滚动时,滚动是如此平滑。 下面是我正在使用的代码: 活动: 创建时 页面适配器: PagechAngelistener: