VJO 简单来说是一套ebay (已经在java这条不归路走火入魔了) javascript 基础设施,通过一套javascript基础类库以及规定注释(自定义和JsDoc),在语法语义上实现了java编程模式的javascript程序 。
可以从java的角度看待javascript,也可以从javascript的角度看待java,互相增强。
java 中所有对象都是Object的实例,用VJO写的javascript中所有对象都是VjO Object的实例。
包括Object的一般方法:
hashcode()
对象的唯一表示
equals(object)
以值来判断对等
getClass()
该对象所属类别
toString()
class + class name ,例如 class x.y
模拟java语法例子:
package samples.simplejava.map; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class Foo { public static Map<String, String> m_testMap = null; public static List<String> m_testList = null; public Foo(){ m_testMap = new HashMap<String, String>(); m_testMap.put("Key1", "value1"); m_testMap.put("Key2", "value2"); m_testList = new ArrayList<String>(); m_testList.add("listValue1"); m_testList.add("listValue2"); } public static void main(String[] args) { new Foo(); bar(); } public static void bar(){ Iterator it = m_testMap.keySet().iterator(); System.out.println("Looping the Map in JavaScript"); while(it.hasNext()){ String str = (String)it.next(); System.out.println("Key : " + str +" & value : "+ m_testMap.get(str)); } System.out.println("Looping the List in JavaScript"); for(int i=0;i<m_testList.size();i++){ System.out.println("index : " + i + "& value : "+ m_testList.get(i)); } } }
vjo.ctype('samples.simplejava.map.Foo') //< public .needs(['vjo.java.util.Map','vjo.java.util.List', 'vjo.java.util.HashMap','vjo.java.util.ArrayList', 'vjo.java.util.Iterator','vjo.java.lang.System']) .props({ m_testMap:null, //< public Map<String,String> m_testMap m_testList:null, //< public List<String> m_testList //> public void main(String[] args) main:function(args){ new this(); this.bar(); }, //> public void bar() bar:function(){ var it=this.m_testMap.keySet().iterator(); this.vj$.System.out.println("Looping the Map in JavaScript"); while(it.hasNext()){ var str=it.next(); this.vj$.System.out.println("Key : "+str+" & value : "+this.m_testMap.get(str)); } this.vj$.System.out.println("Looping the List in JavaScript"); for (var i=0;i<this.m_testList.size();i++){ this.vj$.System.out.println("index : "+i+"& value : "+this.m_testList.get(i)); } } }) .protos({ //> public constructs() constructs:function(){ this.vj$.Foo.m_testMap=new this.vj$.HashMap(); this.vj$.Foo.m_testMap.put("Key1","value1"); this.vj$.Foo.m_testMap.put("Key2","value2"); this.vj$.Foo.m_testList=new this.vj$.ArrayList(); this.vj$.Foo.m_testList.add("listValue1"); this.vj$.Foo.m_testList.add("listValue2"); } }) .endType();
类与命名空间管理:
vjo.ctype('samples.Account') .props({ RATE: 2.45 }) .protos({ amount: 0, balance: 0, constructs: function(){} }) .endType(); //props : 类属性 //protos: 实例属性
导入类的命名空间:
import vjo.utils.X
vjo.needs("vjo.utils.X")
以后代码可以用 this.$vj.X 访问 X 类
定义接口:
interface Y{}
vjo.itype("<namespace>.Y")
定义枚举:
enum E{}
vjo.etype("<namespace>.E")
定义抽象类:(利用注释加以说明)
abstract class Z{}
//> abstract vjo.ctype("<namespace>.Z")
定义内部类
class X{}
X : vjo.ctype()
定义构造函数
D(){}
constructs: function(){}
重载函数(利用注释加以说明)
D(int arg){} D(String arg){}
//>public void constructs(int arg) //>public void constructs(String arg) constructs:function(arg){}
调用父类构造函数
super()
this.base()
调用父类方法
super.doIt()
this.base.doIt()
类继承
class X extends Y
vjo.ctype("<namespace>.X") .inherits("<namespace>.Y")
实现接口(仅表示语义,无实际运行意义)
class X implements Y
vjo.ctype("<namespace>.X") .satisfies("<namespace>.Y")
实现实例方法
void setName(String name)
.protos({ setName: function(String name) })
实现静态方法
static void setName(String name)
.props({ setName: function(String name) })
静态初始代码
static{...}
.inits(function(){...}
枚举常量:
public enum Days { MON,TUE,WED,THU,FRI,SAT,SUN }
vjo.etype('<namespace>.Days') .values('MON,TUE,WED,THU,FRI,SAT,SUN') MON instanceof Days == true
参数类型:(注释说明)
void setName(String name){}
//> void setName(String name) setName : function(name){}
方法访问控制:(注释说明)
public void setName(String name){}
//>public void setName(String name) setName : function(name){}
返回类型:(注释说明)
public X getIt(){}
//> public X getIt() getIt : function(){}
参数个数变长:(注释说明)
public X getIt(String... x)
//>public X getIt(String... x) getIt:function(x){}
局部变量类型:(注释说明)
int x = 10; String s = "hello"; final boolean ok = false;
var x = 10; //< int var s = 'hello'; //< String var ok = false; //< final boolean
优点: 实现了我初学javascript时梦想的java javascript大统一
缺点: 熟练javascript后再这样发觉不能随心所欲写javascript很不爽