如何对java二次封装
理解二次封装的目的
二次封装通常是为了简化原生API的使用、增强功能、统一接口规范或适应特定业务场景。在Java中,常见的封装对象包括集合类、IO操作、JDBC等。
封装集合类示例
对ArrayList进行功能扩展,增加批量操作和空值检查:
public class EnhancedList<T> {
private List<T> internalList;
public EnhancedList() {
this.internalList = new ArrayList<>();
}
public void addAllNonNull(Collection<? extends T> collection) {
collection.stream()
.filter(Objects::nonNull)
.forEach(internalList::add);
}
public List<T> getUnmodifiableView() {
return Collections.unmodifiableList(internalList);
}
}
封装JDBC操作
创建数据库工具类减少样板代码:

public class JdbcWrapper {
private final DataSource dataSource;
public JdbcWrapper(DataSource dataSource) {
this.dataSource = dataSource;
}
public <T> T executeQuery(String sql, ResultSetHandler<T> handler, Object... params) throws SQLException {
try (Connection conn = dataSource.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
setParameters(stmt, params);
try (ResultSet rs = stmt.executeQuery()) {
return handler.handle(rs);
}
}
}
private void setParameters(PreparedStatement stmt, Object[] params) throws SQLException {
for (int i = 0; i < params.length; i++) {
stmt.setObject(i + 1, params[i]);
}
}
}
设计模式应用
使用装饰器模式增强原有功能:
public class BufferedLogger implements Logger {
private final Logger delegate;
private final Queue<String> buffer = new LinkedList<>();
public BufferedLogger(Logger delegate) {
this.delegate = delegate;
}
@Override
public void log(String message) {
buffer.offer(message);
if (buffer.size() >= 10) {
flush();
}
}
public void flush() {
while (!buffer.isEmpty()) {
delegate.log(buffer.poll());
}
}
}
接口标准化实践
统一不同支付渠道的调用方式:

public interface PaymentProcessor {
PaymentResult process(PaymentRequest request);
}
public class AlipayAdapter implements PaymentProcessor {
private AlipayService alipay;
@Override
public PaymentResult process(PaymentRequest request) {
AlipayResponse response = alipay.pay(convertRequest(request));
return convertResponse(response);
}
}
注意事项
- 保持封装后的接口简洁明了
- 避免过度封装导致性能损耗
- 保留必要的原生API访问通道
- 文档中明确标注封装带来的行为变化
- 考虑线程安全性问题
测试验证策略
对封装类进行单元测试时应:
@Test
public void testEnhancedListNullHandling() {
EnhancedList<String> list = new EnhancedList<>();
list.addAllNonNull(Arrays.asList("a", null, "b"));
assertEquals(2, list.getUnmodifiableView().size());
}
版本兼容处理
当底层Java API更新时:
- 使用适配器模式兼容不同版本
- 通过
@Deprecated标注将被淘汰的方法 - 提供迁移指南说明变更点






