Ne peut pas faire une référence statique pour les non-statique de type MyRunnable
Voici le code entier :
import java.util.ArrayList;
public class Test<E extends Comparable<E>>{
ThreadLocal<ArrayList<E>>arraylist=new ThreadLocal<ArrayList<E>>(){
@Override
protected ArrayList<E> initialValue() {
//TODO Auto-generated method stub
//return super.initialValue();
ArrayList<E>arraylist=new ArrayList<E>();
for(int i=0;i<=20;i++)
arraylist.add((E) new Integer(i));
return arraylist;
}
};
class MyRunnable implements Runnable{
private Test mytest;
public MyRunnable(Test test){
mytest=test;
//TODO Auto-generated constructor stub
}
@Override
public void run() {
System.out.println("before"+mytest.arraylist.toString());
ArrayList<E>myarraylist=(ArrayList<E>) mytest.arraylist.get();
myarraylist.add((E) new Double(Math.random()));
mytest.arraylist.set(myarraylist);
System.out.println("after"+mytest.arraylist.toString());
}
//TODO Auto-generated method stub
}
public static void main(String[] args){
Test test=new Test<Double>();
System.out.println(test.arraylist.toString());
new Thread(new MyRunnable(test)).start();
new Thread(new MyRunnable(test)).start();
System.out.println(arraylist.toString());
}
}
mes questions sont:
- Pourquoi
new Thread(new MyRunnable(test)).start();
la cause de l'erreur:
Cannot make a static reference to the non-static type MyRunnable
? - Que signifie le terme "point de référence fixe"?
OriginalL'auteur kaiwii ho | 2012-09-17
Vous devez vous connecter pour publier un commentaire.
Vous utilisez les médicaments génériques en plus inefficace 🙂
Déclarer
MyRunnable<E>
Parce QueGenerics in static context is different than in normal object context
Si je vous comprends bien, vous voulez
MyRunnable
classe pour comprendreE
qui est passé àTest
classe.Ce n'est pas possible, comme vous êtes en train de faire.
Vous aurez à faire
MyRunnable
à comprendreE
et puis vous pouvez y accéder.si j'ajoute le mot-clé le MyRunable,il y aura un autre problème,je ne peux pas utiliser le type générique parmeter,E, à l'intérieur d'elle.Une idée?thx
comme:classe statique MyRunnable <E extends Comparable<E>>implements Runnable?Mais,quelle est la relation entre le type E ici et le E dans le Test<E extends Comparable<E>>? Et est-ce que ma compréhension du sens?Car Test test=new Test<Double>();,de sorte que le MyRunnable E est également en Double?
ajouté quelques explications et l'extrait de code espère que ça efface le doute
thx.Mais,dans le code,u spécifier le type en Double.Et,mon intention est de rendre le code approprié pour n'importe quel type.Et j'ai essayer le type de type générique,il fonctionne.Je ne comprends pas que si j'ai mis rien dans la MyRunable mais juste paramétrer avec une instance de Test,le MyRunnable semble accepter le Test de l'instance de type E comme E type.U peut expliquer pour moi?thx
OriginalL'auteur Amit Deshpande
vous avez déclaré le MyRunnable de classe à l'intérieur de votre classe de Test sans le
static
mot-clé, c'est donc un "intérieur" de la classe. vous ne pouvez instancier un intérieur de classe au sein d'une instance de l'extérieur de la classe. vous essayez de l'instancier dans une méthode statique, n'est donc pas extérieur de l'instance. ma conjecture est que votre intention est de le MyRunnable classe à une classe imbriquée pas un intérieur de classe, de sorte que vous devez juste ajouter le mot-clé static pour la définition de la classe.si j'ajoute le mot-clé le MyRunable,il y aura un autre problème,je ne peux pas utiliser le type générique parmeter,E, à l'intérieur d'elle.Une idée?thx
oui, dans ce cas, vous devez paramétrer le MyRunnable classe, c'est à dire
MyRunnable<E...>
.u veux dire avec le mot-clé,statique et parametierzing la MyRunnable?
oui, c'est ce que je veux dire
OriginalL'auteur jtahlborn