public String getSignature() {
        StringBuilder buffer = new StringBuilder(256);

        boolean found = false;
        if (this.lowerBounds != null) {
            found = true;
            if (this.lowerBounds instanceof ClassTypeDesc) {
                ClassTypeDesc clazz = (ClassTypeDesc) this.lowerBounds;
                String name = clazz.getClassName();
                if (Object.class.getName().equals(name)) {
                    found = false;
                }
            }

            if (found) {
                buffer.append('-').append(this.lowerBounds.getSignature());
            }
        }

        else if (this.upperBounds != null) {
            found = true;
            if (this.upperBounds instanceof ClassTypeDesc) {
                ClassTypeDesc clazz = (ClassTypeDesc) this.upperBounds;
                String name = clazz.getClassName();
                if (Object.class.getName().equals(name)) {
                    found = false;
                }
            }

            if (found) {
                buffer.append('+').append(this.upperBounds.getSignature());
            }
        }

        if (!found) {
            buffer.append('*');
        }

        return buffer.toString();
    }