Eu argumentaria isso da seguinte maneira:
- Por que exatamente seu método retorna vários valores? De que tipo de coesão estamos falando - esses valores devem realmente ser campos em uma única classe ou são retornados apenas por coincidência pelo mesmo método, mas não relacionados? Se for o último, convém dividir o método em dois métodos. Editar: use seu julgamento aqui; Às vezes, um tipo de coesão "coincidente" pode ser a melhor opção. Outra opção é usar uma construção de par ou de tupla, embora em OOP, elas geralmente não sejam vistas em APIs públicas (algumas exceções notáveis são coleções padrão, etc.).
- Se os valores merecem formar uma classe, eu provavelmente desaconselharia o uso de uma classe interna. Classes internas são normalmente usadas como detalhes de implementação interna, ocultos do exterior. Existe alguma razão para que esse resultado não deva ser uma classe "completa", por si só?
- Além de manter dados, quais operações são aplicáveis a essa nova classe? No design orientado a objetos, você deseja ter o comportamento relacionado próximo aos dados relevantes (que também parecem ser suas intenções). O método ao qual você está se referindo não deve residir nessa classe?
Para resumir, eu verificaria se posso transformar esse "objeto de dados" em uma classe avançada com dados e comportamento. Como um comentário adicional, convém tornar a classe imutável, pois seu estado é definido uma vez. Torná-lo imutável ajudará a evitar que seja definido incorretamente ou modificado posteriormente (digamos, alguém configurando um dos campos para nulo e passando adiante).
Edit: Como Patkos Csaba salienta corretamente, o princípio a ser aplicado aqui é o Single Responsability Principle ( SRP ) - a classe que você está tentando criar deve realmente ter uma responsabilidade (definida como uma razão para mudar ). Esta diretriz de design deve ajudá-lo a descobrir se seus dois campos pertencem a uma única classe ou não. Para ficar com o exemplo da Wikipedia, sua classe pode ser vista como um tipo de relatório; nesse caso, está em conformidade com o SRP, mas é difícil comentar sem mais informações.
BitInteger[] java.math.BigInteger.divideAndRemainder(BitInteger val)
. Retorna 2 números inteiros como seus valores de retorno em uma matriz.