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
}
}
3 Réponses :
Bien que le type aussi, depuis Les génériques sont effacés , on ne peut pas instancer un appellerait la méthode comme telle: p> x code> est générique, la classe x code> 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: t code> (ainsi les trois points du code ci-dessus). P>
Vous ne pouvez pas faire méthodes statiques, ainsi que des méthodes d'instance et des constructeurs, peuvent avoir des paramètres de type. P> 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>. public static <T> T get() {
// Can only legally return null or throw.
...
}
...
System.out.println(X.<Integer>get());
Il n'y a pas de telle chose que java.util.function.factory code>. Voulez-vous dire fournisseur code>?
Je pense que le fournisseur peut-être plus approprié pour vous que static x
Statique publique t get () {retour nouveau t ();} --- Est-ce que cela fonctionne?
@Grisgram non, il ne le fait pas depuis
t code> est effacé=)@ Turing85 Plus au point,
t code> peut ne pas avoir de constructeur no-args accessible.@ Tomhawtin-tackline no,
t code> n'existe plus au runtime =)