Yo diría esto en las siguientes líneas:
- ¿Por qué exactamente su método devuelve múltiples valores? ¿De qué tipo de cohesión estamos hablando? ¿Deberían esos valores ser realmente campos en una sola clase, o simplemente son devueltos por el mismo método, pero por lo demás no están relacionados? Si es lo último, puede considerar dividir el método en dos métodos. Editar: usa tu juicio aquí; a veces un tipo de cohesión "coincidente" puede ser la mejor opción. Otra opción es utilizar una construcción de par o tupla, aunque en OOP, estos generalmente no se ven en API públicas (algunas excepciones notables son colecciones estándar, etc.).
- Si los valores merecen formar una clase, probablemente aconsejaría no usar una clase interna. Las clases internas generalmente se usan como detalles de implementación internos, que están ocultos desde el exterior. ¿Hay alguna razón por la cual este resultado no debería ser una clase "completa", por derecho propio?
- Además de mantener datos, ¿qué operaciones son aplicables a esta nueva clase? En el diseño orientado a objetos, desea tener el comportamiento relacionado cerca de los datos relevantes (que también parecen ser sus intenciones). ¿Debería el método al que te refieres no vivir en esta clase?
Para resumir, vería si puedo convertir este "objeto de datos" en una clase completa con datos y comportamiento. Como comentario adicional, es posible que desee hacer que la clase sea inmutable, ya que su estado se establece una vez. Hacerlo inmutable ayudará a evitar que se configure incorrectamente o se modifique más tarde (por ejemplo, alguien que configura uno de los campos como nulo y lo pasa).
Editar: como Patkos Csaba señala correctamente, el principio que se aplica aquí es el Principio de responsabilidad única ( SRP ): la clase que está tratando de crear realmente debería tener una responsabilidad (definida como una razón para cambiar ). Esta guía de diseño debería ayudarlo a determinar si sus dos campos pertenecen o no a una sola clase. Para seguir con el ejemplo de Wikipedia, su clase podría verse como un tipo de informe, en cuyo caso se ajusta a SRP, pero es difícil comentar sin más información.
BitInteger[] java.math.BigInteger.divideAndRemainder(BitInteger val). Devuelve 2 enteros como sus valores de retorno en una matriz.