【发布时间】:2021-12-06 08:36:14
【问题描述】:
我有以下服务实现:
public class DataServiceImpl implements DataService {
private static final String SHEET_TITLE = "export.permission.sheetTitle";
private XSSFWorkbook workbook;
private XSSFSheet sheet;
private AtomicInteger rowCount;
@Override
public MultipartFile export() throws IOException {
createSheet(SHEET_TITLE);
// code omitted for brevity
}
private void createSheet(String title) {
workbook = new XSSFWorkbook();
sheet = workbook.createSheet(title);
rowCount = new AtomicInteger(0);
}
}
在这个类中,我有一些方法,例如createSheet 并且我想将此方法移动到 Util 类中,因为其他类似的类也会使用此方法。
但是,作为一些变量,例如workbook、sheet、rowCount 用于此服务的其他方法中,我不知道是否应该将这些变量传递给 Util 方法 createSheet 然后从它返回,或者其他适当的方法。那么,我应该如何将createSheet 方法移动到我的 Util 类中并在不同的类中使用它?
更新:我也有以下方法。我应该移动它们 Util 类吗?或者我应该为createMultipartFile() 方法创建一个类,就像createSheet() 方法一样,并且只将writeTitles() 方法移动到Util 类?
private MultipartFile createMultipartFile(String title, String extension) throws IOException {
File outputFile = File.createTempFile(TextBundleUtil.read(title), extension);
workbook.write(outputStream);
final FileInputStream input = new FileInputStream(outputFile);
final String fileName = TextBundleUtil.read(title).concat(extension);
return new MockMultipartFile(fileName,
fileName, CONTENT_TYPE, IOUtils.toByteArray(input));
}
private static void writeTitles(Row row, List<String> titles, XSSFCellStyle style) {
for (int i = 0; i < titles.size(); i++) {
Cell cell = row.createCell(i);
cell.setCellValue(titles.get(i));
cell.setCellStyle(style);
}
}
【问题讨论】:
-
我认为在您发表评论的情况下,您需要将您的课程分成两部分,一个带有您需要的功能,另一个带有变量,只是看到您发布的内容,您不能简单地移动您的分类到另一个并扩展。
-
@AL 请举个例子,而不是试图只用文字来解释?
-
看起来你正在做的事情需要有状态?但是像服务和 Util 类这样的东西不应该有会话状态,因为它们通常被不同的用户同时使用。无论哪种情况,共享状态似乎都是错误的。
-
一般来说,如果你有一个名为
Util或XUtil的类,它只是用随意的静态方法集合填满了边缘,那就是糟糕的设计。有时这是最合适的方法,但很少见。恰当的例子:java.util.Collections(它是一个“Utils”类,只是没有这样命名)有sort...但是现在list本身也是如此,这本来应该放在首位。 -
@NathanHughes Cris 作为答案发布的方法怎么样?这是正确的方法吗?
标签: java class inheritance static