• 2006-04-03

    C# to Java 代码转换过程记录

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://skyhorse.blogbus.com/logs/2185258.html

    C# -- > java 过程中遇到的问题记录及解决
    author:lijun
    date:2006-01-02

    0. 预备知识
     C# namespace -- java package
     object x --- Object x
     enum -- jdk 1.5 support , --> static final int
     java 的一个class 文件存在多个class时,只能有一个是public类型的。
     lock -- synchrionized
     ref -- 地址引用。
      void func(ref xx) --- xxtype func(xx)
         使用时 xx = func(xx);
      当多个ref时,只好用全局变量来实现此效果。


     as xx -- (xx) 强制类型转换。
     string -- String 改变大小写. suggest match case,match whole word then replaceAll.
     ToString() -- toString()
     bool --- boolean
     object --- Object
     Console.WriteLine(str); --- System.out.println(str);
     wait,pulse,pulseall -- wait, notify,notifyall
     strFromList.Trim();  --- strFromList.trim();
     strFragAttr.ToLower().Equals(strSelect.ToLower())
     --- strFragAttr.toLowerCase().equals(strSelect.toLowerCase()
     strSql.Substring(nFromIndex,nWhereIndex-nFromIndex) --- strSql.substring(nFromIndex,nWhereIndex)
     // 分割字符
            String[] s=strTableField.Split(new char[]{'.'}); --- String[] s=strTableField.split("\\.");
     // 判断字符串相等 , 如果在java中 用 ==有时会出现问题。
      str1 == str2  --- str1.equals(str2)

     // 有关foreach转换成 for 循环要这样来转换:
     foreach(ArrayList arr in arrConjunctiveNF) --->
                            for(int j=0;j<=arrConjunctiveNF.size()-1;j++)
                            {
                                    ArrayList arr =(ArrayList)(arrConjunctiveNF.get(j));

     array[j]; --- arraylist.get(j);
     array.Count --- array.size();

     Hashtable tableJoinAttributes=Hashtable.Synchronized(new Hashtable());
      --- =new Hashtable(); //Hashtable is synchronized.
      or --- Map m = Collections.synchronizedMap(new HashMap(...));

     PredicateElem e=arr[0] as PredicateElem;  --- PredicateElem e = (PredicateElem)arr[0];

     DictionaryEntry --- Map.Entry
     arr.RemoveAt(i); --- arr.remove(i);
     arr.sort() ---- Collections.sort(arr);

      arrAttr.Add(e.leftOpValue); --- arrAttr.add(e.leftOpValue)

      tableJoinAttributes[leftTable] --- get(leftTable);

     tableJoinAttributes[leftTable]=newArr; ---  this.tableJoinAttributes.put(leftTable,newArr);


     tableJoinAttributes.Contains(leftTable)
     -- tableJoinAttributes.containsKey(leftTable)

     stack.Push() Pop() --- stack.push() pop()

                      foreach(DictionaryEntry entry in this.tableJoinAttributes)
                      {
                              ArrayList arr=entry.Value as ArrayList;
                              this.TrimEqual(arr);
                      }
        ------>
                        Set entrys = tableJoinAttributes.entrySet();
                        Iterator it = entrys.iterator();
                        while(it.hasNext()){
                          ArrayList arr = (ArrayList)((Map.Entry)it.next()).getValue();
                          TrimEqual(arr);
                        }


       又一个例子
                            tableIndexCounts=new Hashtable();
       Foreach(Dictionaryentry Entry In Item.Tableindexs)
       {
        Tableindexcounts[Entry.Key]=(Entry.Value As Hashtable).Count;
       }
       ---->
                                tableIndexCounts=new Hashtable();                           
                                Set entrys =  item.tableIndexs.entrySet();
                                Iterator it = entrys.iterator();
                                while(it.hasNext())
                                {
                                  Map.Entry entry = (Map.Entry)it.next();
                                  tableIndexCounts.put(entry.getKey(),((Hashtable)entry.getValue()).size());
                                }

       对于HashMap 之类的也可以用2个Iterator 同步访问Key & value.

    Class的访问权限:
    每个编译单元(文件)仅能有一个public class。即:只能拥有一个由public class所表现的单一public接口。可以拥有许多个支持用的friendly classes(默认的访问权限,不需要任何关键字)。如果生命不止一个public class,编译器会给出错误。
    public class的名称必须跟编译单元(文件)名称相同。
    编译单元内可以不含任何public class,所以可以任意给定文件名(这个以前不知道)。 


     // 有关实现接口interface的转换
     public class RangeEndPoint:IComparable  --- public class RangeEndPoint implements Comparable
     CompareTo() --- compareTo()


     public class myexample:IComparer
     {  
      public int Compare(object x, object y){}
     }
     --->
     public class myexample implements Comparator{
       public int compare(Object o1, Object o2) {
       //Returns:a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
         return 0;
       }
       // optional
       public boolean equals(Object obj) {
         return false;
       }
     }

     candidate.Sort(new CompareOfTableHorFrag());
     --->   Collections.sort(candidate,new CompareOfTableHorFrag()); 
     or --->
            TableNameAndJoinInfo[] candidate_convert=(TableNameAndJoinInfo[])candidate.toArray();
            Arrays.sort(candidate_convert,new CompareOfTableHorFrag());


     [Serializable]
     ---> implements Serializable

     // c# 的thread 方法名无所谓
     ThreadClassExec exec=new ThreadClassExec();
     Thread threadListen=new Thread(new ThreadStart(exec.ListenThreadMethod));
     threadListen.Start();
     ---> Thread threadListen=new Thread(new implemtsRunableClass())
     class implemtsRunableClass implements Runable{
     public void run(){
     }}
     threadListen.start();

     int nParentIndex; arrBegin.add(nParentIndex)
     --->
            arrBegin.add(new Integer(nParentIndex));

     dataTable,dataTable.Rows ---> CachedRowSet
     dataTable.Rows.Count ---> dataTable.size()

     DataRow row=this.dataTable.Rows[i];
     ---> java 的5.0 版本的 rowset 不提供row , 只能通过metadata得到列数,再遍历
     ResultSetMetaData rsm= dataTable.getMetaData();
            while(crs_down.next()) {
              System.out.print(" "+crs_down.getObject(1));

      key.GetType()==typeof(string)
      ---> if(key.getClass()==String.class)  
      or --> if(key instanceof String)  但是这个好像有是父类时仍相等的问题。不是完全相等.


     System.Data.DataTable.Clone() ,
     ---->
     CachedRowSet.createCopySchema() ,

     Deep Copy:
     System.Data.DataTable.Copy()
     ----> CachedRowSet.createCopy();

     Thread.CurrentThread.Name
     ---> Thread.currentThread.getName();


    收藏到:Del.icio.us




    引用地址: