@Getter @Setter
Class Row{
private int position;
private String name;
private List<Column> columns;
}
@Getter @Setter
Class Column{
private int position;
private String name;
private String description;
}
@UtilityClass
class CsvUtils{
public Function<Void, Row> getCsvRow = (nothing) -> {
Row row = new Row();
row.setPosition(1);
row.setName("Student Details");
// CE : Illegal forward reference
List<Column> columns = getCsvColumn.apply(null);
row.setColumns(columns);
return row;
};
public Function<Void, Column> getColumn = (nothing) -> {
Column csvColumn = new Column();
csvColumn.setPosition(1);
csvColumn.setName("Marks");
return csvColumn;
};
}在从getColumn调用getCsvRow时获取非法前向引用的CE。列表列= getCsvColumn.apply(null);
需要你的帮助来解决这个问题。
我知道的一种方法是将函数接口转换为java方法,然后从"getColumn“调用方法"getCsvRow”。
寻找其他解决方案
发布于 2022-04-22 15:17:34
从
getColumn调用getCsvRow时的非法前向引用
来自Java语言规范的报价
如果以下所有内容都为真,则为编译时错误:
编译器告诉您,在声明函数getColumn之前,您正在尝试使用它。
任何变量都应该在使用该变量的代码上面声明。您应该交换函数的顺序以修复此编译错误。
还有几个问题:
Csv前缀造成的混乱外,还不清楚结果如何返回生成Column对象的函数可以分配给List<Column>。Function<Void, CsvRow>参数的函数(使用Supplier )也没有多大意义。因为您不是在转换数据,这是函数的责任,但是您需要提供一个对象,这就是供应商接口的目的。https://stackoverflow.com/questions/71970641
复制相似问题