java 如何扩展方法?

cyhhao 发布于 2015/01/26 15:43
阅读 5K+
收藏 0

华为云11月刊推送:DIY微信问答机器人,高性能计算代码的20个技巧!>>>

比如说我每次都要用XSSFSheet 的实例sheet。

XSSFSheet sheet = wb.getSheetAt(0);
sheet.getRow(row).getCell(col).getRichStringCellValue();
但是每次都要用到:
.getRow(row).getCell(col).getRichStringCellValue()//这么长的方法

所以想继承一下这个类,写个自己的方法:

class MySheet extends XSSFSheet{
    public MySheet(XSSFSheet sheet){
        super();
    }
    public XSSFRichTextString getcell(int row,int col){
        return super.getRow(row).getCell(col).getRichStringCellValue();
    }
}
MySheet sheet = (MySheet) wb.getSheetAt(0);//但是父类不能强制转换成子类啊!!

如上,编译没错但是运行出错。

听说C#有类的“扩展方法”不知java如何实现?


加载中
0
ray_du
ray_du

自己封闭的类为啥不用呢,MySheet sheet = new MySheet(wb.getSheetAt(0)) ;

多看看Java基础知识吧

ray_du
ray_du
回复 @cyhhao : 实际没有必要这样用,能不能继承得看API支持不了,如楼下所说,你只是需辅助方法或包装类而已,不要做复杂了,实现目的就好
cyhhao
cyhhao
可是 new MySheet(wb.getSheetAt(0))这样传递给构造函数,也没有用呀。父类没有这样一个构造函数可以用super(sheet)
0
纠结名字
你只是需要一个辅助方法而已,至于继承整个类?
cyhhao
cyhhao
额。。。这样用起来方便而且简洁嘛。。。更符合逻辑无缝使用(*^__^*)
0
Shazi199
Shazi199

做个工具类调用不就好了,用继承很符合逻辑?

0
x
xdzzzzzzzz
肯定不能这样转换啊, XSSFSheet sheet = (XSSFSheet new MySheet(wb.getSheetAt(0)) ;
0
宇宙大将军
定义一个接口MyInterface,里面定义getcell方法。然后:
MyInterface sheet = (MyInterface) wb.getSheetAt(0);
0
goto-array
goto-array

便捷功能写在子类里不太适合,写个工具类都比你现在出现问题都快搞定。

你扩展了XSSFSheet类,wb类(忘记叫啥先这么称呼类吧)也要有相应的修改,因为XSSFSheet对象是由wb对象生成的,其次你写的类是新事物,旧程序基本上不会预知其存在(除非带有自检功能吧),而你编码思想违背了这一点。

0
超然net
java没有类似C#中的“扩展方法”,所遇这种简单的事情还是用工具类把,就是相对于c#代码比较臃肿。
0
学习2014
学习2014
。。。。  你直接写个方法 传递sheet  return .xx.xxx.xx不就OK了?
返回顶部
顶部