2
我想創建一對Endpoint控制器類(使用Objectify),並且由於它們共享大量通用代碼,因此請使用一些通用基類。 我覺得做這樣的:如何構建(通用)端點控制器類(層級)
@Api(
backendRoot = "http://localhost:8888/_ah/spi",
root = "http://localhost:8888/_ah/api",
version = "v1"
)
abstract class BaseController[T <: Entity[T]] {
protected def getApiClass() : Class[T]
@ApiMethod(
name = "read",
path = "read",
httpMethod = HttpMethod.GET
)
def read() : JList[T] = {
OfyS.ofy().load().`type`(getApiClass()).list().asInstanceOf[JList[T]]
}
def create(entity : T) : T = {
…
}
…
}
和
@Api(
name = "misc"
)
class MiscController extends BaseController[Misc] {
override protected def getApiClass() = classOf[Misc]
}
幾種實現方式之一。這樣,我基本上只需要在每個實現中替換類型和API名稱(這是基本思想)。
唉,端點試圖揭露getApiClass()的API和我
java.lang.IllegalArgumentException: Parameterized type java.lang.Class<Misc> not supported
(據我所知,我不能省略類型參數在這裏。)
這種情況雖然方法是受保護文件指出只有公開的方法纔會暴露。這可能是因爲斯卡拉的'受保護'味道(我根本不知道)。如果它是私有的(如果我沒有使用類層次結構,基本上可以工作),我無法覆蓋它。
對於如何使基本思想起作用,你有任何線索嗎?
當然!我怎麼會盲目忘記構造函數呢..謝謝! – user462982 2014-12-05 15:35:01