使用 Poiji 库创建一个通用方法以在黄瓜中加载数据集

Creating a Generic method to load dataSet in cucumber using Poiji library

我有一个 class 从场景步骤加载数据 我的第一个 class 是 LoadUserStepDfn

public class LoadUserStepDfn extends LoadDataStepDfn<User> {

public LoadUserStepDfn(ReadingUserUsingPoiji readingUserUsingPoiji) {
    super.readingExcelUsingPoiji = readingUserUsingPoiji;
}

@Given("^Data is loaded from \"([^\"]*)\"$")
public void data_is_loaded_from (String filePath) throws Throwable {
    super.data_is_loaded_from(filePath);
}

它调用 class 名为 LoadDataStepDfn

public class LoadDataStepDfn<T> {

public List<T> data;

protected ReadingExcelUsingPoiji readingExcelUsingPoiji;

public void data_is_loaded_from (String filePath) throws Throwable {
    data = readingExcelUsingPoiji.TransformExcelToClass(filePath);

}

这是我的 class,读取 excel 并将其存储到 java class

public abstract class ReadingExcelUsingPoiji<T> {


public List<T> TransformExcelToClass(String filePath){
    PoijiOptions options = PoijiOptions.PoijiOptionsBuilder.settings().addListDelimiter(";").build();
    List<T> data = Poiji.fromExcel(new File(filePath), getMyType(), options);
    return data;
}

public abstract Class<T> getMyType();

}

我想用一个的问题class我不希望它是抽象的并且使用另一个wiche是这个class

public class ReadingUserUsingPoiji extends ReadingExcelUsingPoiji<User> {


public Class<User> getMyType(){
    return User.class;
}

我想在这里理解,所以你不需要@override,而是 returns 你 class 的类型转换成的一种方法??

为什么不能这么简单...您有一种方法可以确定 class 您应该使用什么来转换为...

我不明白你为什么要使用泛型……你的逻辑似乎并不真正关心它?特别是如果你有 1 个 ReadingExcelUsingPoiji class..它真的不应该关心。

public class ReadingExcelUsingPoiji<T> {

public List<T> transformExcelToClass(String filePath, Class<T> classToTransformTo) {
    PoijiOptions options = PoijiOptions.PoijiOptionsBuilder.settings().addListDelimiter(";").build();
    List<T> data = Poiji.fromExcel(new File(filePath), classToTransformTo, options);
    return data;
}


public static void main(String [] args) {
    
    ReadingExcelUsingPoiji genericConverter = new ReadingExcelUsingPoiji();
    
    List<User> listOfUsers = genericConverter.transformExcelToClass("yourFilePath", User.class);
    List<Car> listOfCars = genericConverter.transformExcelToClass("yourFilePath", Car.class);
}

}

public class LoadUserStepDfn extends LoadDataStepDfn<User> {

    
    
    @Given("^Data is loaded from \"([^\"]*)\"$")
    public void data_is_loaded_from (String filePath) throws Throwable {
        super.data_is_loaded_from(filePath , User.class);
    }

}




public class LoadDataStepDfn<T> {

    public List<T> data;

    protected ReadingExcelUsingPoiji readingExcelUsingPoiji;

    protected void data_is_loaded_from(String filePath, Class<T> classToTransformTo) throws Throwable {
        data = readingExcelUsingPoiji.transformExcelToClass(filePath, classToTransformTo);

    }

}