我正在构建一个 Java 网络库和一个使用它的应用程序。图书馆包括:
- 一个接口 PacketSocket,它具有发送和接收字节数据包的方法。
- 它有两种实现,一种通过 TCP,一种通过 UDP。
- 建立在 PacketSocket 之上的 ObjectConnection 类,将对象序列化为字节数据包。
应用程序在 UDPPacketSocket 之上使用 RequestConnection。UDPPacketSocket 实现的独特之处在于它支持为每个数据包指定是否应保证传送。我希望能够在应用程序中使用,但无法通过 ObjectConnection 和 PacketSocket 接口。
我当然可以为这些接口中的适用方法添加一个布尔保证参数,但是我最终(当有更多 PacketSocket 实现时)必须添加更多仅特定于某些实现而被其他人忽略的参数.
相反,我虽然可以使用 UDPPacketSocket 的静态线程本地属性来做到这一点,如下所示:
class Application {
public void sendStuff() {
// is stored in a ThreadLocal, so this code is still thread-safe
UDPPacketSocket.setGuaranteed(true);
try {
myObjCon.send(...);
} finally {
// ... restore old value of guaranteed
}
}
}
您如何看待这样的方法?