2012-03-25 91 views
1

我想知道在Play(2.0)框架的模板引擎中是否有某種instanceof功能。這將允許我在模型層中有效地使用繼承結構。Play框架的模板引擎中是否存在「instanceof」功能?

這基本上是我想什麼(除了這個模板不編譯):

@(instance: Superclass) 

@main { 
    @if(instance instanceof Subclass) { 
     Subclass instanceOfSubclass = (Subclass) instance;  
    } 
} 

編輯:我的意思是在爲Java特定的播放。

回答

4

使用Scala模式匹配。

@(instance: Superclass) 

@main { 
    @instance match { 
    case foo: Foo => { 
     <a href="@routes.Foo.index()">@foo.title</a> 
    } 
    case bar: Bar => { 
     <a href="@routes.Bar.index()">@bar.title</a> 
    } 
    } 
} 
+1

這樣做的竅門!謝謝! – Christophe 2012-03-26 09:14:26

+1

它對我來說很奇怪,它在java世界中工作,因爲'Foo'和'Bar'必須有提取器(不適用)才能進行模式匹配。我現在很好奇,知道這是訣竅。任何線索? – 2012-03-26 12:21:11

+1

我不知道。一方面,這種模式匹配只檢查類型。另一方面,Play仍然在Java中執行一些字節碼魔術。否則,在爲Java和Scala提供API的框架中,Scala模板不會有多大意義。 – 2012-03-26 12:30:41

相關問題