0
votes

Java en utilisant ce mot clé à l'intérieur d'un fil créé à l'intérieur d'une classe

J'ai du code comme celui-ci:

class MyClass{
    final ArrayList<Thread> list= new ArrayList<>();
    for(int i=0;i<N;i++)
        new Thread(()->{
            //more instructions...
            list.remove(this);
        }).start();
}


1 commentaires

Votre fonction Lambda n'est pas membre de thread ; Il s'agit juste d'être transmis dans le constructeur de fil. Donc ceci ne peut pas être votre objet de thread.


5 Réponses :


6
votes

Ce fait référence à l'instance myClass .

En tant que vous utilisez une expression Lambda, qui ne possède aucun ce contexte c'est propre.

Mais même si vous remplacez l'expression de la Lambda avec une sous-classe anonyme, comme ceci: xxx

this this ferait référence à la sous-classe anonyme de runnable , et non à un fichier instance .


0 commentaires

1
votes

Ce mot clé referve à l'objet qui appelle la méthode. Dans ce cas mycass. Votre liste contient des threads. Votre code tente de supprimer cet objet (myClass) à partir d'une liste contenant des threads.

ce qui n'a pas de sens


2 commentaires

Oui, je comprends le sentiment de l'avertissement, c'est pourquoi myClass est référé au lieu de fil, mais basé sur la réponse de @MC Emperor Ceci est dû à l'utilisation de l'expression de Lambda


Ce n'est pas à cause de Lambda, c'est parce que vous définissez la méthode de cette classe (myClass). Chaque fois que vous utilisez "ceci" dans un plan de classe, il fera référence à l'instance qui appelle la méthode. MC EMP souligne que l'expression de la Lamba ne change pas ce que "ceci" est de reposer.



0
votes

J'ai eu une solution de contournement qui correspond à mon besoin: xxx

J'ai changé la liste afin qu'il contienne des objets exécubles , puis ce sera se référer à la classe exécutive.


0 commentaires

0
votes

Vous pouvez utiliser runnable pour éviter ce conflit de mots-clés.


0 commentaires

1
votes

Utilisation d'un Runnable à la place vous aidera à éviter les contextes emballés.


0 commentaires