2012-11-23 48 views
0

我是Java初学者,我想问一下关于Java编写通用代码的传统的一些话。我在下面的代码中编写了用于将项目推入通用排序集合的帮助类,并且我想知道它被接受了吗?或者我应该扩展一些基类的集合?或者以其他方式欢迎更多Java?如何在Java中编写标准对象的泛型扩展?

package com.rkovalev.Helper; 

import java.util.Comparator; 
import java.util.List; 

public abstract class ListExtensions { 
    public static <T> void addOnCompare(List<T> collection, T item, Comparator<T> comparator) { 
     synchronized(collection) { 
      int i = 0; 
      int size = collection.size(); 
      if (size == 1) { 
       int diff = comparator.compare(item, collection.get(0)); 
       switch(diff) { 
       case 1: i++; break; 
       default: break; 
       } 
      } else { 
       int range = size - 1; 
       i = size/2; 
       int left = 0; 
       int right = range; 
       while(true) { 
        if (i <= 0) { i = 0; break; } 
        if (i > range) { i = range; break; } 
        int diff = comparator.compare(item, collection.get(i)); 
        if (diff == 0) break; 
        else { 
         if (diff == -1) right = i; 
         if (diff == 1) left = i; 
         int near = i + diff; 
         if (near < 0) { i = 0; break; } 
         if (near > range) { i = range + 1; break; } 
         int diff_near = comparator.compare(item, collection.get(near)); 
         if (diff_near == 0) { i = diff_near; break; } 
         if (diff_near == diff) { 
          int step = (right-left)/2; 
          if (step == 0) step = 1; 
          switch(diff){ 
          case -1: 
           right = i; 
           i = i - step; break; 
          case 1: 
           left = i; 
           i = i + step; break; 
          } 
         } else if (diff > diff_near) { 
          i = near; break; 
         } else { break; }   
        } 
       } 
      } 
     collection.add(i, item); 
     } 
    } 
} 
+1

如果你要求代码审查,请考虑发布到http://codereview.stackexchange.com/。 –

回答

2

如果你想使可用于所有集合类额外的“通用”的功能,然后在“助手”类写的功能的静态方法是正确的道路要走。

将该方法添加到现有集合类的基类中将不起作用。这将需要修改标准的Java类库,并且没有人在他们的正确思想中这样做。 (这在技术上是可行的,但是你会为你的代码创建一个可移植的噩梦,如果你使用与你的代码相关的商标术语“Java”,更不用提法律问题了。)