我想编写一个返回会话(Cassandra数据库)和连接(MySQL)的泛型函数吗?
这是我的代码:
def getdb: Session = {
var cluster = Cluster.builder().addContactPoint("127.0.0.1").build()
var session: Session = cluster.connect("keyspace")
if (session.getState != null) {
currentDB = "cassandra"
return session
}
else{
//code for mysql connection
return Connection
}
}
我应该如何定义我的函数,以便get db应该返回到它连接的任何一个。
答案 0 :(得分:2)
这是不可能的,因为这两个Sessions对象虽然具有相同的名称,但它们不同。你可以返回一个Either但是你仍然需要不同的代码来处理右VS左。
答案 1 :(得分:1)
在尝试从语法/返回类型的角度解决此问题之前,我会考虑另外两点:
系统架构。您真的需要两个由您的应用程序动态发现的存储系统吗?只是想知道,这种情况的实际用例是什么。
应用程序架构。如果您确实需要支持两种存储类型,请尝试隐藏通用接口(特征)背后的特定细节。然后你的方法返回类型将是接口类型,它将返回特定的实现。
答案 2 :(得分:0)
我认为你可以在一个元组中返回它们。无论哪个为null,都应返回Option
。
一些usefeul链接可能会有所帮助: