8. Xtend news!
JavaOne 2012
Xtend at JavaOne
10/2 10:00
Sebastian's プレゼンテーション on Xtend
Video is online
https://oracleus.activeevents.com/connect/sessionDetail.ww?SESSION_ID=6630
44. ローカル型推論
変数の型は右の式から推論されます。
また、メソッドの戻り値もメソッド本体から推測されます。
package demo;
import java.util.Date;
package demo
@SuppressWarnings("all")
import java.util.Date
public class DemoClass {
private final int a = 1;
class DemoClass {
val a = 1
private String b = "test";
var b = 'test'
public var c = 2
public int c = 2;
def hoge() {
public String hoge() {
val d = new Date
String _xblockexpression = null;
'hoge'
{
}
Date _date = new Date();
}
final Date d = _date;
_xblockexpression = ("hoge");
}
return _xblockexpression;
}
}
47. ステートメントレス( if 式)
if (p) e1 else e2
if は p の結果により e1 か e2 を返す式です。
val a = if (true) 1 else 2
println(a) // 1
else をオプションで省略可能です。
val a = if (false) 1
val b = if (false) 'a'
println(a) // 0
println(b) // null
48. ステートメントレス( for 式)
for (T1 variable : arrayOrIterable) expression
for は void を返す式です。
variable の型は arrayOrIterable の型から型推論される
ので省略可能です。
val arr = newArrayList(1,2,3,4,5)
for (i : arr) {
println(i)
}
49. ステートメントレス( try-catch 式)
try-catch も式です。以下のようなコードを書くことで
今まで必要だったローカル変数を省略できます。
val s = 'a'
val n = try {
Integer::parseInt(s)
} catch (NumberFormatException ex) {
-1
}
println(n) // -1
50. ステートメントレス(その他)
ローカル変数 it を使用すると、 it に代入された
インスタンスのフィールドやメソッドがローカルのように
扱えます。
package demo
class Hoge {
@Property
String fuga
}
class DemoClass {
def static void main(String... args) {
val it = new Hoge
fuga = 'test'
println(fuga) // test
}
}
51. ステートメントレス(その他)
?. によるメソッド呼び出しで、 null 安全な呼び出し
が可能です。
var hoge = new Hoge Hoge _hoge = new Hoge();
hoge?.hello Hoge hoge = _hoge;
if (hoge!=null) hoge.hello();
hoge = null hoge = null;
hoge?.hello if (hoge!=null) hoge.hello();