我有:
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
复制相似问题