首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java 8接口

Java 8接口
EN

Stack Overflow用户
提问于 2018-03-27 12:26:35
回答 3查看 107关注 0票数 2

我有:

代码语言:javascript
运行
复制
public class CustomSheet extends XSSFSheet implements customSheetsI

在XSSFSheet中有一种方法,

代码语言:javascript
运行
复制
public XSSFWorkbook getWorkbook() {
    return (XSSFWorkbook)this.getParent();
}

在我的customSheet类中,我希望重写getWorkbook方法(或添加一个新的getCustomWorkbook),将工作簿转换为customWorkbook。我可以在我的接口的每个实例中这样做,但是我想利用Java 8并直接在接口中编写方法。

就像这样

代码语言:javascript
运行
复制
    public interface customSheetsI<T extends XSSFSheet>
    {
        default LogChunkWorkbook getLogWorkbook() {
            return (LogChunkWorkbook)getWorkbook();
        }
..

使用来自超类getWorkbook的XSSFSheet。但这不像我写的那样有效。它不知道getWorkbook的事。我该怎么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-27 12:32:38

您还可以在接口中添加getWorkbook()方法,并在CustomSheet中实现它。你就可以这样使用它了:

代码语言:javascript
运行
复制
public interface customSheetsI {
    default String getLogWorkbook() {
        return (String) getWorkbook();
    }

    YourReturnType getWorkbook();
}
票数 3
EN

Stack Overflow用户

发布于 2018-03-27 12:34:48

同时,您的CustomSheet是一个XSSFSheet (为什么它有getWorkbook()),并实现您想要使用的customSheetsI

现在,您有几种选择:

  • 创建一个abstract class AbstractCustomSheet extends XSSFSheet implements customSheetsI,它可以按照您描述的方式定义它的getLogWorkbook()
  • customSheetsI派生Sheet,以便它已经有了所需的getWorkbook()
  • 创建一个从customSheetsISheet派生的“中间”接口,以便它已经拥有了所需的getWorkbook()

它们都告诉实现您的getLogWorkbook()的类或接口,即将有一个合适的getWorkbook()

票数 3
EN

Stack Overflow用户

发布于 2018-03-27 12:45:37

getWorkbook()中调用customSheetsI是crasy。如果您有一个实现customSheetsI但不扩展XSSFSheet的类,那么当您调用getLogWorkbook()时,Java如何解析getWorkbook()。我建议您来自动态语言(如Ruby )世界,并期望VM在无法解决方法时抛出异常。事实上,在Java中,它是更静态的。

为了解决您的问题,我认为您还需要一个类来扩展XSSFSheet,让它命名为MyXSSFSheet并在其中添加getLogWorkbook,然后创建以前扩展XSSFSheet以扩展MyXSSFSheet的所有类。

PS:在Java中命名接口时,customSheetsI的名称并不常见,最好使用大写字母的Camel命名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49512816

复制
相关文章

相似问题

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