VJO 简要学习笔记

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很不爽

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值