>>517
ちょっと待て、switchはファクトリーメソッドの話。

ユーザーパッケージの中でnewされたオブジェクト(抽象クラスを継承した物
またはインターフェースをインプリメントしたもの)を受け取る関数を
汎用パッケージに持たせるのが普通では?
つまり、何らかの入力に対して何らかの出力をしたければ、
(例えばの話として)汎用パッケージでは、
constructor(InputStream is,OutputStream os)
というのを用意して、
ユーザーパッケージでは、相応のInputStreamとOutputStreamの派生クラスを
newして
コンストラクタに渡してあげればよい。