Java Generics - No Static field


Using generics, type parameters are not allowed to be static. As static variable is shared among object so compiler can not determine which type to used. Consider the following example if static type parameters were allowed.


package com.tutorialspoint;

public class GenericsTester {
   public static void main(String[] args) {
      Box<Integer> integerBox = new Box<Integer>();
	  Box<String> stringBox = new Box<String>();
      integerBox.add(new Integer(10));

   private static void printBox(Box box) {
      System.out.println("Value: " + box.get());

class Box<T> {
   //compiler error
   private static T t;

   public void add(T t) {
      this.t = t;

   public T get() {
      return t;

As stringBox and integerBox both have a stared static type variable, its type can not be determined. Hence static type parameters are not allowed.