Eu tenho mais de 10 parâmetros em uma classe de dados. Quero inicializar a classe de dados com um construtor vazio e definir os valores apenas para alguns parâmetros usando o setter e passar o objeto para o servidor.
data class Activity(
var updated_on: String,
var tags: List<String>,
var description: String,
var user_id: List<Int>,
var status_id: Int,
var title: String,
var created_at: String,
var data: HashMap<*, *>,
var id: Int,
var counts: LinkedTreeMap<*, *>,
)
Uso:
Algo assim será fácil
val activity = Activity();
activity.title = "New Computer"
sendToServer(activity)
Mas exige que todos os argumentos sejam passados enquanto o construtor criador. Como posso simplificar como acima?
val activity = Activity(null,null,null,null,null,"New Computer",null,null,null,null);
sendToServer(activity)
copy
você precisa de uma instância de classe de dados. Para criá-lo, você precisa chamar um construtor - e aqui estava o problema.emptyList
não alocará memória repetidamente. Retorna um singleton .Se você fornecer valores padrão para todos os campos - o construtor vazio será gerado automaticamente pelo Kotlin.
e você pode simplesmente ligar para:
fonte
class FeelComChatMessage (messageText: String = "", messageUser: String = "")
Juntamente com a resposta @miensol, deixe-me adicionar alguns detalhes:
Se você quiser um construtor vazio visível para Java usando classes de dados, precisará defini-lo explicitamente.
Usar valores padrão + especificador de construtor é bastante fácil:
Isso significa que, com esse truque, agora você pode serializar / desserializar esse objeto com os serializadores Java padrão (Jackson, Gson, etc.).
fonte
Se você der um valor padrão para cada parâmetro principal do construtor:
e da classe em que as instâncias você pode chamá-la sem argumentos ou com os argumentos que você tem naquele momento
fonte
Eu sugeriria modificar o construtor primário e adicionar um valor padrão para cada parâmetro:
Você também pode tornar os valores anuláveis adicionando
?
e, em seguida, avaliandonull
:Em geral, é uma boa prática evitar objetos anuláveis - escreva o código da maneira que não precisamos usá-los. Objetos não anuláveis são uma das vantagens do Kotlin em comparação ao Java. Portanto, a primeira opção acima é preferível .
Ambas as opções fornecerão o resultado desejado:
fonte
Construtor secundário não vazio para a classe de dados no Kotlin:
Construtor secundário vazio para a classe de dados no Kotlin:
fonte
A partir da documentação
fonte