Pourquoi le format de la Chaîne(Objet... args) définie comme une méthode statique?

Je me demande pourquoi Java 5 et au-dessus de fournir un printf de style de formatage à l'aide d'une méthode statique de la classe String comme ceci:

public static String format(String format, Object... args)

au lieu de

public String format(Object... args)

afin que nous puissions écrire "%02d".format(5) pour obtenir 05 au lieu de String.format("%02d", 5).

J'ai imaginé si je pouvais modifier la classe String, je pourrais ajouter ceci:

public String format(Object... args) {
    return format(this, args)
}

pour obtenir le même résultat.

J'ai trouvé qu'en C#, une méthode statique est également utilisé à la place d'une méthode d'instance.

Je me demande pourquoi ils ont décidé de faire cela, mais je ne suis pas venu pour une explication. Les méthodes d'instance trim et substring retourne une nouvelle instance de string, donc ils devraient avoir fait la même chose avec format.

En outre, la DateFormat classe utilise également ce:

public final String format(Date date)

pour le formatage des dates. Donc, si nous considérons l'exemple de DateFormat que le formateur, une instance de la Chaîne peut également être utilisé en tant que formateur.

Des idées?

  • est-il vraiment important?
  • il n'a pas vraiment d'importance, mais je me demandais simplement si il n'y a aucune logique derrière cela. Puisque nous ne sommes pas écrire String.substring("abcde", 3, 2) mais "abcde".substring(3, 2), le format doit avoir la même invocation de la méthode de trop, je pense.
  • De même, pourquoi est-il Collections.sort(List), plutôt que de List.sort(). Je n'ai jamais aimé que beaucoup.
  • J'ai créé un rapport de bug pour cette fois. Il a été refusé, mais il contient une explication. Je vais jeter un oeil. Je pense que le point principal était qu'une mise en forme syring est sémantiquement différent d'un autre syring essentiellement.
  • Ce mineur de l'ineptie qui me motive les noix sur une base quotidienne.
  • En Python (docs.python.org/2/library/stdtypes.html#str.format) et Ruby (ruby-doc.org/core-2.5.0/String.html#method-i-25) c'est non méthode statique