protected PropertyGeneratorImpl(String[] propertyNames,
                                    Class[] propertyClasses,
                                    Class[] supportedOpClasses) {
        if(propertyNames == null ||
           propertyClasses == null ||
           supportedOpClasses == null) {
            throw new IllegalArgumentException(JaiI18N.getString("PropertyGeneratorImpl0"));
        } else if(propertyNames.length == 0 ||
                  propertyClasses.length == 0 ||
                  supportedOpClasses.length == 0) {
            throw new IllegalArgumentException(JaiI18N.getString("PropertyGeneratorImpl1"));
        } else if(propertyNames.length != propertyClasses.length) {
            throw new IllegalArgumentException(JaiI18N.getString("PropertyGeneratorImpl2"));
        }

        for(int i = 0; i < propertyClasses.length; i++) {
            if(propertyClasses[i].isPrimitive()) {
                throw new IllegalArgumentException(JaiI18N.getString("PropertyGeneratorImpl4"));
            }
        }

        this.propertyNames = propertyNames;
        this.propertyClasses = propertyClasses;
        this.supportedOpClasses = supportedOpClasses;
    }