Java 对受保护构造函数的查询
对不起,这个愚蠢的问题。 下面是我使用ApachePOI从电子表格中读取的代码。我感到困惑的是Java 对受保护构造函数的查询,java,apache-poi,Java,Apache Poi,对不起,这个愚蠢的问题。 下面是我使用ApachePOI从电子表格中读取的代码。我感到困惑的是 XSSFWorkbook wb = new XSSFWorkbook(fs); XSSFSheet sheet = wb.getSheetAt(0); 我已经创建了一个XSSFSheet对象,它接受wb.getSheetAt(0),我的问题是为什么要将wb.getSheetAt(0)传递给sheet对象。 当我尝试创建一个对象时,如下所示 XSSFSheet sheet = new XSSFShee
XSSFWorkbook wb = new XSSFWorkbook(fs);
XSSFSheet sheet = wb.getSheetAt(0);
我已经创建了一个XSSFSheet对象,它接受wb.getSheetAt(0),我的问题是为什么要将wb.getSheetAt(0)传递给sheet对象。
当我尝试创建一个对象时,如下所示
XSSFSheet sheet = new XSSFSheet(wb);
我得到一个错误声明
XSSFSheet(org.apache.poi.openxml4j.opc.PackagePart) has protected access in 'org.apache.poi.xssf.usermodel.XSSFSheet'
我查看了XSSFSheet源代码,它的构造函数被声明为受保护。我的印象是,可以使用new关键字创建对象。我错过了什么
源代码供参考
package ReadAndWrite;
import ReadExcelLibrary.ReadExcelSheet;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
/**
* Created by Shravya on 11/5/17.
*/
public class ReadExcel {
public static void main(String[] args) throws Exception {
File file = new File("//Development//Selenium//ApachePOI//Apache_wb.xlsx");
FileInputStream fs = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(fs);
//XSSFSheet sheet = new XSSFSheet(wb);
XSSFSheet sheet = wb.getSheetAt(0);
String value = sheet.getRow(0).getCell(0).getStringCellValue();
System.out.println("The value of cell is " + value);
ReadExcelSheet excelSheet = new ReadExcelSheet("//Development//Selenium//ApachePOI//Apache_wb.xlsx");
System.out.println(excelSheet.getData(0,1,1));
}
}
让我们假装你能做到。它将创建一个尚不存在的新XSSFSheet对象
XSSFSheet sheet = wb.getSheetAt(0);
这完全不是一回事。这允许获取工作簿中索引为0的现有工作表。所以这是两件完全不同的事情。基本上,从车库买一辆车和制造一辆全新的汽车之间存在着相同的区别
所以当你说
我创建了一个XSSFSheet对象,它接受wb.getSheetAt(0)
那是不对的。你还没有创造任何东西。您已获得对工作簿已为您创建的现有XSSFSheet对象的引用
我的印象是,可以使用new关键字创建对象
是的,这是构造函数允许做的。但是,如果构造函数受到保护,这意味着只有同一包中的子类或类才允许调用构造函数
要在工作簿中创建新工作表,可以使用,要求工作簿为您创建工作表,并提供对已创建工作表的引用。就像,为了得到一辆新车,你通常不会自己造一辆,而是让汽车制造商为你造一辆
让我们假装你能做到。它将创建一个尚不存在的新XSSFSheet对象
XSSFSheet sheet = wb.getSheetAt(0);
这完全不是一回事。这允许获取工作簿中索引为0的现有工作表。所以这是两件完全不同的事情。基本上,从车库买一辆车和制造一辆全新的汽车之间存在着相同的区别
所以当你说
我创建了一个XSSFSheet对象,它接受wb.getSheetAt(0)
那是不对的。你还没有创造任何东西。您已获得对工作簿已为您创建的现有XSSFSheet对象的引用
我的印象是,可以使用new关键字创建对象
是的,这是构造函数允许做的。但是,如果构造函数受到保护,这意味着只有同一包中的子类或类才允许调用构造函数
要在工作簿中创建新工作表,可以使用,要求工作簿为您创建工作表,并提供对已创建工作表的引用。就像,为了获得一辆新车,你通常不会自己造一辆,而是让汽车制造商为你造一辆。哦,那些排名前1%的家伙。其中一个想法是“嗯,这看起来像是我可以在手机上回答的问题”,然后你找到了这样一个完美的答案,哈哈。除了给答案投票外,没什么可做的了。谢谢@GhostCat,我很荣幸。最高0.01%。更糟糕的是:-)哦,那些排名前1%的家伙。其中一个想法是“嗯,这看起来像是我可以在手机上回答的问题”,然后你找到了这样一个完美的答案,哈哈。除了给答案投票外,没什么可做的了。谢谢@GhostCat,我很荣幸。最高0.01%。更糟糕的是:-)
XSSFSheet sheet = wb.getSheetAt(0);