Skip to content

Unchecked Warnings Summary

Unchecked Warnings Concept

  • Compiler warnings about type safety
  • Related to generic type operations
  • Indicates potential runtime errors
  • Example:
    List list = new ArrayList<String>();  // unchecked warning
    list.add("hello");                    // unchecked warning
    

Common Unchecked Scenarios

  1. Raw Types:

    List list = new ArrayList<String>();  // using raw type
    

  2. Type Casting:

    T[] array = (T[]) new Object[10];  // unchecked cast
    

  3. Generic Array Creation:

    List<String>[] array;  // generic array creation 
    

@SuppressWarnings

  • Annotation to suppress warnings
  • Use sparingly and with justification
  • Document why suppression is safe
  • Example:
    @SuppressWarnings("unchecked")
    public static <T> T[] createArray(Class<T> type, int size) {
      return (T[]) new Object[size];
    }
    

Safe Generic Array Creation

  • Use ArrayList instead of arrays
  • Create Object array and cast
  • Document type safety
  • Example:
    // Instead of T[] array:
    List<T> list = new ArrayList<>();
    
    // Or if array needed:
    @SuppressWarnings("unchecked")
    T[] array = (T[]) new Object[size];
    

Raw Types

  • Types without type parameters
  • Should be avoided
  • Legacy from pre-generic Java
  • Example:
    // Don't use:
    List list = new ArrayList();
    
    // Use instead:
    List<Object> list = new ArrayList<>();
    

Best Practices

  • Address warnings when possible
  • Document suppressed warnings
  • Use most specific scope for @SuppressWarnings
  • Avoid raw types
  • Test type safety thoroughly
  • Consider alternative designs