在我使用的测试框架中,有一个Precondition注释,该注释接受一个类并在运行时在其中调用call()方法。

测试框架的核心模块:

前提条件注释

public @interface Precondition {
    Class<? extends Scriptlet<? extends Context>> scriptlet();
    String value() default Constants.EMPTY_STRING;
}


脚本

public interface Scriptlet<V> extends Callable<V> {
}


语境

public interface Context {
}




如果我将以下前提条件类传递给Precondition批注,将不会有任何错误。

CommonContextInit前提条件类

class CommonContextInit implements Scriptlet<DataModel>{

    CommonContextInit(Object script,String value){
    }

    @override
    public DataModel call() throws Exception {
        return null;
    }
}


脚本

@Precondition(scriptlet=CommonContextInit.class)


但是我想使CommonContextInit成为通用的,用户可以在其中传递scriptlet的类型,因此我如下更改了CommonContextInit

CommonContextInit前提条件类

class CommonContextInit<T extends Context> implements Scriptlet<T>{

    CommonContextInit(Object script,String value){
    }

    @override
    public T call() throws Exception {
        return null;
    }
}


但是这里的问题是我不知道如何将类传递给Precondition。我尝试了以下内容,但看起来完全是无效的语法。

// ERROR: The annotation @Precondition is disallowed for this location.
@Precondition(scriptlet=CommonContextInit<DataModel>.class)


如何将ClassCommonContextInit<DataModel>传递给Precondition

最佳答案

扩展我的评论,您将拥有类似

class DataModelInstance extends CommonContextInit<DataModel>  implements Scriptlet<DataModel>{
    DataModelInstance(Object script,String value){
        super(script, value);
    }
    //other overrides
}


然后呼叫@Precondition(scriptlet=DataModelInstance.class)

10-08 18:28