小编jwp*_*pol的帖子

如何在每个测试方法之前和之后执行sql脚本

spring中有一个@Sql注解,允许在测试方法之前和之后执行sql代码:

@Test
@Sql("init.sql")
@Sql(scripts = "clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
public void someTest()
{
}
Run Code Online (Sandbox Code Playgroud)

然而,我有几种测试方法,我想提供与上面的测试相同的干净环境,并且我不想为每个测试重复相同的@Sql注释。如何一次性完成所有方法?例如:

// JPA and Spring other test annotations
@Sql("init.sql")
@Sql(scripts = "clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
public class TestClass
{
  // init.sql executed before every test, clean.sql executed after every test
}
Run Code Online (Sandbox Code Playgroud)

java junit spring jpa spring-boot

6
推荐指数
1
解决办法
8483
查看次数

是否有任何理由从 hashCode 方法返回常量值?

我有一个与 java.lang.Object 中关于 hashCode 方法的广泛讨论主题相关的问题。只是有什么理由为什么我应该在某些用例中从 返回一个常量值hashCode()

public int hashCode()
{
   return 3;
}
Run Code Online (Sandbox Code Playgroud)

如果您找到一些直接回答我的问题的文章或 SO 线程,我将不胜感激。坦白说我做不到。

我的想法

docs.oracle.com 对象 hashCode()(我知道在 SO 中多次引用):

如果根据 equals(java.lang.Object) 方法两个对象不相等,则不需要对这两个对象中的每一个调用 hashCode 方法必须产生不同的整数结果。但是,程序员应该意识到为不相等的对象生成不同的整数结果可能会提高哈希表的性能。”

所以理论上hashCode()可以返回一个常数值。在我的想象和我读过的内容中,当使用例如HashMap. 举个例子,假设 1000 个元素将被放置在完全相同的哈希桶中(换句话说,将有 1000 次冲突),并在错误的情况下找到特定的元素,即必须迭代 1000 个元素。然后它将执行类似于LinkedList收集(如果我错了请纠正我)。

基于上述,hashCode()可以返回一个常量值,但它会破坏使用hash...集合获得的性能。那么在某些特定示例中这样做是否有意义?

编辑:我发现了一个hashCode基于 Vlad 的 Mihalcea 文章的具有常量方法的特定示例:How to implement equals and hashCode using JPA entity identifier , (Hibernate)。HashCode 在实体状态转换之间有所不同,因此它应该返回常量值。引自文章:

当实体第一次存储在 Set 中时,标识符为空。实体持久化后,标识符被分配给自动生成的值,因此 hashCode 不同。因此,实体在持久化后无法在 Set 中找到。

所以有一个实际的例子,但正如它以性能为代价所指出的那样。如果除了entity …

java hash hashcode

1
推荐指数
1
解决办法
327
查看次数

泛型方法(有界类型)与继承

我有一个典型的问题什么更好,我认为答案总是视情况而定,但无论如何我想澄清一下。所以有两种方法:

public static <A extends Animal, F extends Food> void feed(A animal, F food) {
    animal.setFood(food);
}

public static void feed(Animal animal, Food food) {
    animal.setFood(food);
}
Run Code Online (Sandbox Code Playgroud)

和逻辑:

Cat cat = new Cat(); // Cat is a child of Animal
Dog dog = new Dog(); // Dog is a child of Animal

Pork pork = new Pork(); // Pork is a child of Food
pork.setName("Whiskas");
Beef beef = new Beef(); // Beef is a child of Food
beef.setName("Pedigree");

AnimalService.feed(cat, beef); …
Run Code Online (Sandbox Code Playgroud)

java generics inheritance

1
推荐指数
1
解决办法
283
查看次数

标签 统计

java ×3

generics ×1

hash ×1

hashcode ×1

inheritance ×1

jpa ×1

junit ×1

spring ×1

spring-boot ×1