2009-04-10 18 views
17

Mỗi lập trình viên kết thúc bằng một nhóm các lớp tiện ích sau một thời gian. Một số trong số đó là ngọc trai lập trình đúng và chúng được tái sử dụng trong một số dự án của bạn. Ví dụ, trong java:Lớp học được sử dụng nhiều nhất của bạn là gì?

class Separator { 

     private String separator; 
     private boolean called; 

     public Separator(String aSeparator) { 
      separator = aSeparator; 
      called = false; 
     } 

     @Override 
     public String toString() { 
      if (!called) { 
       called = true; 
       return ""; 
      } else { 
       return separator; 
      } 
     } 
    } 

và:

public class JoinHelper { 

    public static <T> String join(T... elements) { 
     return joinArray(" ", elements); 
    } 

    public static <T> String join(String separator, T... elements) { 
     return joinArray(separator, elements); 
    } 

    private static <T> String joinArray(String sep, T[] elements) { 
     StringBuilder stringBuilder = new StringBuilder(); 
     Separator separator = new Separator(sep); 

     for (T element : elements) { 
      stringBuilder.append(separator).append(element); 
     } 

     return stringBuilder.toString(); 
    } 
} 

là gì tái sử dụng hầu hết các lớp học của bạn?

+2

Make wiki cộng đồng này, xin vui lòng. Nếu không, bạn có nguy cơ bị đóng cửa. – Randolpho

+2

Bạn có thể sử dụng StringUtils # join từ commons-lang của Apache không? –

+0

đó chỉ là một exaple của có thể "homegrow" tiện ích lớp – dfa

Trả lời

4

Lớp tiện ích có chức năng ghi nhật ký và email. Một lớp mở rộng có chứa các phương thức mở rộng. Một lớp học báo cáo rằng về cơ bản khai thác dịch vụ web dịch vụ báo cáo và làm cho nó dễ dàng để dòng báo cáo như excel, pdf vv

Ví dụ ...
1.) Utility Class (tĩnh)

public static void LogError(Exception ex) 
    { 
     EventLog log = new EventLog(); 
     if (ex != null) 
     { 
      log.Source = ConfigurationManager.AppSettings["EventLog"].ToString(); 
      StringBuilder sErrorMessage = new StringBuilder(); 
      if (HttpContext.Current.Request != null && HttpContext.Current.Request.Url != null) 
      { 
       sErrorMessage.Append(HttpContext.Current.Request.Url.ToString() + System.Environment.NewLine); 
      } 
      sErrorMessage.Append(ex.ToString()); 
      log.WriteEntry(sErrorMessage.ToString(), EventLogEntryType.Error); 
     } 
    } 

2.) Extensions Lớp

public static IEnumerable<TSource> WhereIf<TSource>(this IEnumerable<TSource> source, bool condition, Func<TSource, bool> predicate) 
    { 
     if (condition) 
      return source.Where(predicate); 
     else 
      return source; 
    } 
1

Lớp trình ghi nhật ký: Nhật ký nào ghi lại luồng kiểm soát trong tệp nhật ký.

11

System.Object - hầu như tất cả các loại của tôi đều mở rộng.

1

Cấu hình Reader/Setter: mà đọc cấu hình từ tập tin ini/xml và thiết lập môi trường của việc áp dụng

1

tái sử dụng Hầu hết? Hmmm ...

tăng :: shared_ptr <> với boost :: weak_ptr <>

có lẽ hầu hết sử dụng lại (cũng có lẽ hầu hết đập-cho-buck ratio)

1

Globals

Chỉ cần một lớp đơn giản với DBConnString tĩnh và một vài cài đặt ứng dụng khác.

Đã sử dụng lại tệp đơn giản trong khoảng 2 chục dự án kể từ khi làm việc với .Net

3

tái sử dụng Hầu hết nhưng nhàm chán:

public static void handleException(Exception e) throws RuntimeException { 
    if (e instanceof RuntimeException) { 
     throw (RuntimeException) e; 
    } 

    throw new RuntimeException(e); //NOPMD 
} 

Ít nhàm chán (còn phương pháp cho các danh sách xây dựng và bộ):

/** 
    * Builds a Map that is based on the Bean List. 
    * 
    * @param items Bean List items 
    * @param keyField Bean Field that will be key of Map elements (not null) 
    * @return a Map that is based on the Bean List 
    */ 
    @SuppressWarnings("unchecked") 
    public static <T, K> Map<K, T> buildMapFromCollection(final Collection<T> items, 
                 boolean linkedMap, 
                 final String keyField, 
                 final Class<K> keyType) { 
    if (items == null) { 
     return Collections.emptyMap(); 
    } 

    if (keyField == null) { 
     throw new IllegalArgumentException("KeyField is null"); 
    } 

    final Map<K, T> result; 

    if (linkedMap) { 
     result = new LinkedHashMap<K, T>(); 
    } else { 
     result = new HashMap<K, T>(); 
    } 

    BeanMapper mapper = null; 
    for (final T item : items) { 
     if (mapper == null) { 
     mapper = new BeanMapper(item.getClass()); 
     } 
     final K key = (K) mapper.getFieldValue(item, keyField); 
     result.put(key, item); 
    } 
    return result; 
    } 
+1

Bạn nên đổi tên nó doNotHandleException (...) :) –

+0

Hoặc chỉ sử dụng Guava Throwables – takacsot

1

Một ConcurrentDictionary tôi đã viết, mà bây giờ tôi dường như sử dụng ở khắp mọi nơi (tôi viết rất nhiều các chương trình song song)

+0

Và nó ở đâu? – nawfal

+1

Nó là ở đây: http://concurrent.codeplex.com/ Tôi đã viết rằng một * rất * thời gian dài trước đây mặc dù và tôi không có ý tưởng như thế nào tốt nó được. – Martin

3
public static short getLastDayOfMonth(short givenMonth, short givenYear) 
{ 
    short lastDay = 31; 
    switch (givenMonth) 
    { 
     case 4: 
     case 6: 
     case 9: 
     case 11: 
      lastDay = 30; 
      break; 
     case 2: 
      if ((int)givenYear % 4 == 0) 
      { 
       lastDay = 29; 
      } 
      else 
      { 
       lastDay = 28; 
      } 
      break;  
    } 
    return lastDay; 
} 
+5

Quá tệ, đây là lỗi. http://www.dataip.co.uk/Reference/LeapYear.php Thuật toán của bạn sẽ trả lại 29 cho 1900, khi nó phải là 28. Tại sao không sử dụng thời gian Joda hoặc một cái gì đó như thế? – I82Much

Các vấn đề liên quan