0
votes

Type générique à la méthode statique

L'exemple est assez simple. Ce que je veux est écrit. Les problèmes sont dans les commentaires.

import java.util.*;

class Main
{
  private static class X<T> {
    public static T get() { return new T(); }
  }
  public static void main(String[] args)
  {
    System.out.println(X<Interger>.get()); // illegal start of type 
    // commenting out above yields:
    // error: non-static type variable T cannot be referenced from a static context
  }
}


4 commentaires

Statique publique t get () {retour nouveau t ();} --- Est-ce que cela fonctionne?


@Grisgram non, il ne le fait pas depuis t est effacé =)


@ Turing85 Plus au point, t peut ne pas avoir de constructeur no-args accessible.


@ Tomhawtin-tackline no, t n'existe plus au runtime =)


3 Réponses :


1
votes

Bien que le type x est générique, la classe x n'est pas. En Java, il n'y a pas de "classes génériques" (seuls des types génériques). Ce qui était le plus probablement destiné est un paramètre générique sur la méthode statique: xxx

aussi, depuis Les génériques sont effacés , on ne peut pas instancer t (ainsi les trois points du code ci-dessus).

un appellerait la méthode comme telle: xxx


0 commentaires

4
votes

Vous ne pouvez pas faire nouveau t () code>. Pour une chose, il n'y a aucune garantie que t code> a un constructeur no-args accessible. Pertinent ici, il n'y a pas de constructeur no-arg pour integer code>.

méthodes statiques, ainsi que des méthodes d'instance et des constructeurs, peuvent avoir des paramètres de type. P>

public static <T> T get() {
    // Can only legally return null or throw.
    ...
} 
...
System.out.println(X.<Integer>get());


1 commentaires

Il n'y a pas de telle chose que java.util.function.factory . Voulez-vous dire fournisseur ?



1
votes

Je pense que le fournisseur peut-être plus approprié pour vous que static x .get : xxx


0 commentaires