我有一个场景,在这个场景中我需要将一个对象编组到XML中.该对象可以是多种类型,所以我创建了一个接口,将该对象类型设置为泛型T.
interface FileMarshaller<T> {
fun marshal(object: T): File
}
并且我将有该接口的几个实现,每种类型的对象一个.这是其中之一:
internal class DocumentFileMarshaller : FileMarshaller<Document> {
override fun marshal(document: Document): File {
//some kotlin code
}
}
很好,这就是我需要的.问题出在工厂.该工厂接收一个参数,并根据该参数决定应该检索哪个封送处理程序.
class FileMarshallerFactory {
internal fun createMarshaller(fileType: FileTypes): FileMarshaller<What should I put here?> {
when (fileType) {
FileTypes.DOCUMENT -> {
return DocumentFileMarshaller()
}
else -> throw MarshallerNotFound(MARSHALLER_NOT_FOUND)
}
}
}
问题出在工厂的返回类型上.我不能把它留空,我不能把文档作为它的类型,因为我会有更多的实现.如何处理此类型参数?也许除了我创建的这个工厂之外,还有其他方法?