@Override
        public boolean equals(Object object) {
            if (object == this) { return true; }
            else if (!(object instanceof java.lang.reflect.ParameterizedType)) {
                return false;
            }

            java.lang.reflect.ParameterizedType other =
                (java.lang.reflect.ParameterizedType) object;
            if (!this.getRawType().equals(other.getRawType())) { return false; }

            java.lang.reflect.Type[] thisArguments =
                this.getActualTypeArguments();
            java.lang.reflect.Type[] otherArguments =
                other.getActualTypeArguments();

            if (thisArguments.length != otherArguments.length) { return false; }

            for (int i = 0; i < thisArguments.length; i++) {
                if (!thisArguments[i].equals(otherArguments[i])) { return false; }
            }

            return true;
        }