我在scala中部分重写了一个java项目。对于项目中的持久层,我有一组实体定义为具体实现的接口。我用squeryl重写持久层。我正在尝试建立最有效的方法来在调用遗留代码时桥接这些类型,遗留代码将引用这些接口。所以我在遗留的java代码中说了以下接口:
public interface Author
{
public void setName(String name);
public String getName();
// etc
}
void someLegacyFunc(Author author) // ...
然后在我的新scala代码中,我会得到以下squeryl对象
class Author (
val name: String;
// etc ...
)
我知道我可以将这两者联系起来:
class AuthorBridge(author: Author) implemenets legacy.Author {
public void setName(String: name) = author.name = name
public String getName() = author.name
// etc.
}
然而,它是一个非常大的库,我想避免必要时定义一组全新的桥对象。我想知道scala反射是否可以提供一些更动态的方法来执行以下操作:
object Bridge {
def get[Legacy, Entity](entity: Entity): Legacy {
// builds an anonymous implementation of Legacy
// binding all the getter/setter methods to the entity's attributes
}
}
val legacyAuthor = getAuthor(author)
由于 DES