我有:
public class CustomSheet extends XSSFSheet implements customSheetsI在XSSFSheet中有一种方法,
public XSSFWorkbook getWorkbook() {
return (XSSFWorkbook)this.getParent();
}在我的customSheet类中,我希望重写getWorkbook方法(或添加一个新的getCustomWorkbook),将工作簿转换为customWorkbook。我可以在我的接口的每个实例中这样做,但是我想利用Java 8并直接在接口中编写方法。
就像这样
public interface customSheetsI<T extends XSSFSheet>
{
default LogChunkWorkbook getLogWorkbook() {
return (LogChunkWorkbook)getWorkbook();
}
..使用来自超类getWorkbook的XSSFSheet。但这不像我写的那样有效。它不知道getWorkbook的事。我该怎么做?
发布于 2018-03-27 12:32:38
您还可以在接口中添加getWorkbook()方法,并在CustomSheet中实现它。你就可以这样使用它了:
public interface customSheetsI {
default String getLogWorkbook() {
return (String) getWorkbook();
}
YourReturnType getWorkbook();
}发布于 2018-03-27 12:34:48
同时,您的CustomSheet是一个XSSFSheet (为什么它有getWorkbook()),并实现您想要使用的customSheetsI。
现在,您有几种选择:
abstract class AbstractCustomSheet extends XSSFSheet implements customSheetsI,它可以按照您描述的方式定义它的getLogWorkbook()customSheetsI派生Sheet,以便它已经有了所需的getWorkbook()customSheetsI和Sheet派生的“中间”接口,以便它已经拥有了所需的getWorkbook()。它们都告诉实现您的getLogWorkbook()的类或接口,即将有一个合适的getWorkbook()。
发布于 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命名。
https://stackoverflow.com/questions/49512816
复制相似问题