Java是个扶不起的阿斗,sun在赢了微软的官司以后似乎在忙于分红,相对于红红火火的.net世界,sun几乎在坐以待毙,浪费无数开源爱好者的感情。
matrix展望2006的java,似乎只能看到开源爱好者的一腔热血。
未来的java应该是什么样子呢?下面是我期望:
/**
* 1. 空指针抑制<br>
* JVM支持的Runtime空指针抑制,根据方法的[Nullable]标记<br>
* java里面有太多的NullPointer异常,经常需要复杂的检测,浪费没必要的代码。
*/
[Nullable]
public void testNullable(A a){
return a.b().c.d(); //如果用if else写需要多少代码?
}
/**
* 2. 动态属性支持<br>
* 类似范型的实现,由编译器支持即可。<br>
* @param a: A implements DynamicBean,没有定义c属性
*/
public void dynamicProperty(A a){
assert a != null;
a.b.c = "abc"; //等效于a.getProperty("b").setProperty("c","abc");
ResultSet rs; //for database:
String name = rs.name; //if ResultSet defined getStringProperty(): String name = rs.getStringProperty("a");
Element order; //for xml, element auto-created in getProperty() method.
order.address.phone = "1234"; //order.getProperty("address").setProperty("phone","1234");
}
/**
* 3. 动态方法支持<br>
* 由编译器支持即可。<br>
* @param a: A implements DynamicInvoke,没有定义b()方法
*/
public void dynamicMethod(A a){
a.b(1,"x"); //编译为a.invoke("b",new Object[]{1,"x"]);
}
/**
* 4. 快速反射<br>
* 由编译器支持即可。便于编译期间错误检查<br>
* @param a: A 定义了b(),c变量
*/
public void fastReflection(A a){
Annotation[] mas = a.b().class.getAnnotations(); //a.getClass().getMethod("b").getAnnotations();
Annotation[] mas = a.c.class.getAnnotations(); // a.getClass().getField("c").getAnnotations();
}
/**
* 5. 索引器<br>
* 类似.net的索引器,语法简洁。编译期间支持即可<br>
* @param a: A 实现了List接口,Map接口
*/
public void indexVisit(A a){
Element order ; //xml element
Element first = order[0]; //order.get(0);
Element address = order["address"]; //order.get("address")
}
/**
* 6. AOP<br>
* JVM内置支持AOP标记<br>
* Trace是用户自行定制的Attribute, Trace.Interceptor指定拦截器
*/
[Trace]
[Role("admin")][Transactional]
public void jvmAOP(A a){
}
/**
* 7. 条件编译<br>
* 编译器支持Condition标记,可以用于所有元素,甚至package<br>
* 用于测试期间、调试期间编译出不同的结果
*/
/**
* 8. Schema,DataBase编译支持<br>
*/
public static void schemaSupport() {
[Schema(url="file://test.xsd")]
Document doc;
Element c = doc.a.b.c; //根据schema编译期间检查
}
/**
* 9. 内置对象数据库,支持类似记忆的遗忘模式以节省空间
*/
public void databaseSupport(){
Database.default.find("");
}
10. 应该是平台支持,象.net一样平滑。* 1. 空指针抑制<br>
* JVM支持的Runtime空指针抑制,根据方法的[Nullable]标记<br>
* java里面有太多的NullPointer异常,经常需要复杂的检测,浪费没必要的代码。
*/
[Nullable]
public void testNullable(A a){
return a.b().c.d(); //如果用if else写需要多少代码?
}
/**
* 2. 动态属性支持<br>
* 类似范型的实现,由编译器支持即可。<br>
* @param a: A implements DynamicBean,没有定义c属性
*/
public void dynamicProperty(A a){
assert a != null;
a.b.c = "abc"; //等效于a.getProperty("b").setProperty("c","abc");
ResultSet rs; //for database:
String name = rs.name; //if ResultSet defined getStringProperty(): String name = rs.getStringProperty("a");
Element order; //for xml, element auto-created in getProperty() method.
order.address.phone = "1234"; //order.getProperty("address").setProperty("phone","1234");
}
/**
* 3. 动态方法支持<br>
* 由编译器支持即可。<br>
* @param a: A implements DynamicInvoke,没有定义b()方法
*/
public void dynamicMethod(A a){
a.b(1,"x"); //编译为a.invoke("b",new Object[]{1,"x"]);
}
/**
* 4. 快速反射<br>
* 由编译器支持即可。便于编译期间错误检查<br>
* @param a: A 定义了b(),c变量
*/
public void fastReflection(A a){
Annotation[] mas = a.b().class.getAnnotations(); //a.getClass().getMethod("b").getAnnotations();
Annotation[] mas = a.c.class.getAnnotations(); // a.getClass().getField("c").getAnnotations();
}
/**
* 5. 索引器<br>
* 类似.net的索引器,语法简洁。编译期间支持即可<br>
* @param a: A 实现了List接口,Map接口
*/
public void indexVisit(A a){
Element order ; //xml element
Element first = order[0]; //order.get(0);
Element address = order["address"]; //order.get("address")
}
/**
* 6. AOP<br>
* JVM内置支持AOP标记<br>
* Trace是用户自行定制的Attribute, Trace.Interceptor指定拦截器
*/
[Trace]
[Role("admin")][Transactional]
public void jvmAOP(A a){
}
/**
* 7. 条件编译<br>
* 编译器支持Condition标记,可以用于所有元素,甚至package<br>
* 用于测试期间、调试期间编译出不同的结果
*/
/**
* 8. Schema,DataBase编译支持<br>
*/
public static void schemaSupport() {
[Schema(url="file://test.xsd")]
Document doc;
Element c = doc.a.b.c; //根据schema编译期间检查
}
/**
* 9. 内置对象数据库,支持类似记忆的遗忘模式以节省空间
*/
public void databaseSupport(){
Database.default.find("");
}
希望sun早日把java捐赠到开源社区,象eclipse一样焕发青春。