     }
 }
 
+extension DefaultsKey where ValueType: Collection, ValueType.Element: DefaultsSerializable {
+
+    @available(*, unavailable, message: "Even though element of this array has a default value, the whole array doesnt and so you need to either pass it via argument or in extension.")
+    public convenience init(_ key: String) {
+        fatalError()
+    }
+}
+
 /// Base class for static Codable user defaults keys. Use for saving
 /// `Codable` values, otherwise use `DefaultsKey`.
 open class DefaultsCodableKey<ValueType: Codable>: DefaultsKeys {

    }
}

public extension DefaultsCodableKey where ValueType: Codable, ValueType: OptionalType, ValueType.Wrapped: Codable {

    convenience init(_ key: String) {

    }
}

public extension DefaultsKey where ValueType: Collection, ValueType.Element: DefaultsDefaultArrayValueType, ValueType.Element: DefaultsSerializable {

    convenience init(_ key: String) {
        let value: ValueType = ValueType.Element.defaultArrayValue as! ValueType
        self.init(key, defaultValue: value)
    }
}

public extension DefaultsCodableKey where ValueType: DefaultsDefaultValueType {

    convenience init(_ key: String) {
        self.init(key, defaultValue: ValueType.defaultValue)
    }
}

public extension DefaultsCodableKey where ValueType: Collection, ValueType.Element: DefaultsDefaultArrayValueType, ValueType.Element: Codable {

    convenience init(_ key: String) {
        let value: ValueType = ValueType.Element.defaultArrayValue as! ValueType
        self.init(key, defaultValue: value)
    }
}

