2017-09-23 2 views
-2

Cela peut être une question un peu stupide, mais je suis nouveau pour Lamda Expressions et la programmation en général.Les interfaces et classes utilisées dans une expression Lambda peuvent-elles être placées dans des fichiers séparés?

Après avoir expérimenté autour avec Lambda Expression comme ceci:

interface Starter { 
    public void start(); 
} 

class Machine { 
public void run(Starter s) { 
    System.out.println("Running code...."); 
    s.start(); 
} 
} 
public static void main(String[] args){ 
    Machine mac1 = new Machine(); 
    mac1.run(() -> System.out.println("Hello World")); 
} 

Il m'a fait me demande, si l'interface et la classe (machine dans ce cas) peut être déplacé dans des fichiers séparés pour que cela fonctionne toujours? J'ai essayé de le faire comment je pense que cela fonctionnerait, mais cela n'a pas fonctionné, est-ce possible? et si oui, comment le faites-vous?

+0

oui. tu peux le faire. – Optional

+1

Il est * extrêmement * rare que plus d'une classe de niveau supérieur figure dans un fichier source unique. Bien que le langage le supporte, il n'est jamais fait dans le vrai travail. Je l'ai seulement vu dans de petits morceaux de code ad hoc, par ex. lors de la publication de code sur des sites de test/challenge en ligne. Donc, pour répondre à votre question: Oui, vous pouvez * toujours * mettre des classes de niveau supérieur dans des fichiers source * séparés *. – Andreas

Répondre

1

Tant que la classe de la machine et de l'interface de démarrage sont visibles à votre classe principale, alors c'est parfaitement possible. Je suppose que vous avez déplacé l'interface Starter vers un autre paquet que la classe principale, et comme vous n'avez pas inclus le modificateur "public", il n'est plus visible pour la classe principale et refusera de compiler.

+0

Oh, je comprends maintenant, merci pour votre réponse :) – DrStrange02

0

Si je comprends bien votre problème correct, que juste ajouter une classe à part (disons App.class), qui contient la méthode public static void main:

public interface Starter { 

    public void start(); 

} 

public class Machine { 

    public void run(Starter s) { 
     System.out.println("Running code...."); 
     s.start(); 
    } 

} 


public class App { 

    public static void main(String[] args){ 
     Machine mac1 = new Machine(); 
     mac1.run(() -> System.out.println("Hello World")); 
    } 

} 
+0

Ah, je vois merci – DrStrange02