En Java, existe-t-il un équivalent de l' instruction "using" du C # permettant de définir une portée pour un objet:
using (AwesomeClass hooray = new AwesomeClass())
{
// Great code
}
En Java, existe-t-il un équivalent de l' instruction "using" du C # permettant de définir une portée pour un objet:
using (AwesomeClass hooray = new AwesomeClass())
{
// Great code
}
Il y a maintenant une telle fonctionnalité, qui est venu en Java 7 "Automatique de Gestion des Ressources" (BRAS) à l'aide de l' try
mot-clé le cadre du Projet de Pièce de monnaie, JSR 334). E. g.
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
Les ressources pour mettre en œuvre java.lang.AutoCloseable
.
Voir aussi:
try
-avec-déclaration de ressourcesMise à jour: Java 7 a été pendant un certain temps et Eclipse Indigo SR1 prend désormais en charge le nouveau Java 7 fonctionnalités, y compris le BRAS.
Avant Java 7, il n'y a pas de telle fonction en Java (Java 7 et voir BalusC's réponse concernant le BRAS).
Vous avez besoin de le faire manuellement et c' était une douleur:
AwesomeClass hooray = null;
try {
hooray = new AwesomeClass();
// Great code
} finally {
if (hooray!=null) {
hooray.close();
}
}
Et c'est juste le code quand ni // Great code
ni hooray.close()
peut lancer des exceptions.
Si vous vraiment voulez seulement limite la portée d'une variable, alors qu'un simple bloc de code fait le travail:
{
AwesomeClass hooray = new AwesomeClass();
// Great code
}
Mais ce n'est probablement pas ce que vous voulez dire.
Si vous êtes intéressé dans la gestion des ressources, le Projet de Lombok offre l' @Cleanup
d'annotation. Prises directement à partir de leur site:
Vous pouvez utiliser
@Cleanup
afin d'assurer une la ressource est automatiquement nettoyé avant le chemin d'exécution de code sorties votre champ d'application actuel. Pour ce faire, vous l'annotation de toute variable locale déclaration auprès de la@Cleanup
l'annotation de la sorte:
@Cleanup InputStream in = new FileInputStream("some/file");
En tant que résultat, à la fin de l'étendue que vous êtes en,
in.close()
est appelé. Cet appel est garanti par un essayer/pour finir de construire. Regardez le l'exemple ci-dessous pour voir comment cela fonctionne.Si le type d'objet que vous souhaitez nettoyage ne pas avoir un
close()
la méthode, mais certains autres non-argument méthode, vous pouvez spécifier le nom de cette méthode comme suit:
@Cleanup("dispose") org.eclipse.swt.widgets.CoolBar bar = new CoolBar(parent, 0);
Par défaut, la méthode de nettoyage est présumé être
close()
. Une méthode de nettoyage qui prend l'argument ne peut pas être appelé via le@Cleanup
.
Vanille Java
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream(args[0]);
try {
OutputStream out = new FileOutputStream(args[1]);
try {
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
} finally {
out.close();
}
} finally {
in.close();
}
}
}
Avec Lombok
import lombok.Cleanup;
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}
}
Les blocs ARM du projet Coin seront en Java 7. Cette fonctionnalité est destinée à apporter une fonctionnalité similaire à Java comme la syntaxe de .Net.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.