Java泛型?延伸Clazz

时间:2014-04-26 13:55:23

标签: java spring hibernate generics junit4

我正在使用spring,hibernate和junit为我的一些模型设置测试类。

我的所有模型都扩展了 BaseModel

我的测试类中有以下功能:

void printValidation(Set<ConstraintViolation<? extends BaseModel>> v){
        Iterator<ConstraintViolation<? extends BaseModel>> it = v.iterator();
        while (it.hasNext()) {
            ConstraintViolation<? extends BaseModel> violation = it.next();
            l.info("Validation error {}", violation);
        }
    }

我在测试用例中使用它是这样的:

eModel = new Entry(); //This class extends BaseModel
Set<ConstraintViolation<? extends BaseModel>> v = validator.validate(eModel);
assertTrue("There should be validation errors...", v.size() > 0);
printValidation(v);

但是,我在Eclipse中收到以下消息,它似乎不起作用:类型不匹配:无法从Set<ConstraintViolation<Entry>>转换为Set<ConstraintViolation<? extends BaseModel>>

我还有很多其他测试,如果我使用<Entry>而不是<? extends BaseEntry>,则可以使用。我有很多我正在测试的模型,而且不需要复制它就是泛型的全部内容。

我在这里缺少什么,我想这与validator.validate返回的内容有什么关系?

**编辑修复内联代码格式**

2 个答案:

答案 0 :(得分:1)

@geoand - 几乎,这是工作代码:

<T extends BaseModel> void printValidation(Set<ConstraintViolation<T>> v){
    Iterator<ConstraintViolation<T>> it = v.iterator();
    while (it.hasNext()) {
        ConstraintViolation<T> violation = it.next();
        l.info("Validation error {}", violation);
    }
}

进行测试的功能:

@Test
public void testEntry() {
    Set<ConstraintViolation<Entry>> v = validator.validate(eModel);
    assertTrue("There should be validation errors...", v.size() > 0);
    printValidation(v);

答案 1 :(得分:0)

尝试void <T extends BaseModel> printValidation(Set<ConstraintViolation<T>> v)

相关问题