My question comes from this other question.The first time I read the question, I understood (maybe worngly) that the OP was asking for a different way to initialize the object in such a way that it would allow him to extend and make easier the maintenance. Hence my answer.However, some comments seem to agree with passing an array as a single argument would be even easier.We usually don't turn a function with # named parameters into a function with a single array of # positions. public Message(String id, String a, String b){...}public Message(String[] arguments){...}public Message(String... arguments){...}Turning # named parameters (all the same type) into a array is something I have done back in my early days as coder. Back then, I realised how brittle they were. For example, these structures are very sensible to changes. The order of the elements within the array and the length of the array matters, because we map attributes, fields or variables to positions within the array.The following question agree with me. The only apparent difference is that the former question, the function is a constructor and in the last one is a method. So looking at both questions linked here, I see how on one side we are suggesting to use arrays the way I commented and on the other side, we are discouraging from doing  the very same practice.My question boils down to, from the OOP point of view,  Are arrays (as data structures) suitable for constructors but unsuitable methods? If yes. Why? Do we apply different rules to define constructor's and method's signatures? Ultimately, both are functions.If not. When is appropriated to use one or another?To me, both cases lacks on maintainability, readability and scalability.
Are arrays -as data structures- suitable for constructors?
design;object oriented design
There is no difference in the suitability of arrays [1] as function or constructor arguments. The real question is if an array is a correct model for the kind of data you have. In your example where you have a 2-part message with an ID, transforming (pseudo code)Message(String id, String a, String b)toMessage(String[3] message)is wrong because an array is the wrong data structure for that kind of data. You do not have a list of three texts. What you have is three pieces of data that comprise a single structured entity. So even the three separate arguments are highly questionable because they fail to express that they all belong together. At least use something like this:struct MessageData {    String id;    String a;    String b;}Message(MessageData message)However, thats not the ideal data structure, either. id should really be of its own distinct type that maybe holds a string inside. Why?It is an identifier, not a text. So it shouldnt be a string.We have textual data that represents two different concepts: identifier and payload text. (At least thats how I chose to interpret a and b for lack of more specific info about what kind of message this is.) Different concepts should be modelled as different types.What this all boils down to is: Use the type system to its full extend to make your data structures as expressive as possible. After all, thats why we have type systems in the first place.[1]: Im using array in a broad sense here  as in a container for a sequence of values