public final This defineList(String key, Object... values) {
        if (values.length == 0) {
            throw new IllegalArgumentException(
                    getClass().getSimpleName() + ".defineList was called with no vararg values.");
        }
        if (Stream.of(values).anyMatch(Objects::isNull)) {
            throw new IllegalArgumentException(
                    getClass().getSimpleName() + ".defineList was called with a vararg array containing null values.");
        }

        return defineList(key, Arrays.asList(values));
    }
Define an attribute as the comma-separated {@link String} from the elements of the {@code values} argument.
<p>
Examples:
<pre>
handle.createUpdate("insert into things (&lt;columnNames&gt;) values (&lt;values&gt;)")
    .defineList("columnNames", "id", "name", "created_on")
    .bindList("values", 1, "Alice", LocalDate.now())
    .execute();

List&lt;Thing&gt; things = handle.createQuery("select &lt;columnNames&gt; from things")
    .bindList("columnNames", "id", "name", "created_on")
    .mapTo(Contact.class)
    .list();
</pre>

@param key    attribute name
@param values vararg values that will be comma-spliced into the defined attribute value.
@return this
@throws IllegalArgumentException if the vararg array is empty, or contains any null elements.
core/src/main/java/org/jdbi/v3/core/statement/SqlStatement.java