首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个函数java 11功能接口调用一个函数时的非法前向引用

从另一个函数java 11功能接口调用一个函数时的非法前向引用
EN

Stack Overflow用户
提问于 2022-04-22 14:46:35
回答 1查看 68关注 0票数 0
代码语言:javascript
复制
@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”。

寻找其他解决方案

EN

回答 1

Stack Overflow用户

发布于 2022-04-22 15:17:34

getColumn调用getCsvRow时的非法前向引用

来自Java语言规范的报价

如果以下所有内容都为真,则为编译时错误

  • 类中类变量的声明或接口C在使用类变量的后以文本形式出现;

编译器告诉您,在声明函数getColumn之前,您正在尝试使用它。

任何变量都应该在使用该变量的代码上面声明。您应该交换函数的顺序以修复此编译错误。

还有几个问题:

  • 除了名称中随机出现的Csv前缀造成的混乱外,还不清楚结果如何返回生成Column对象的函数可以分配给List<Column>
  • 此外,使用带Function<Void, CsvRow>参数的函数(使用Supplier )也没有多大意义。因为您不是在转换数据,这是函数的责任,但是您需要提供一个对象,这就是供应商接口的目的。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71970641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档