# Metaprogrammation et java

**URL:** <https://forum.geekzone.fr/t/metaprogrammation-et-java/49606>\
**Category:** Dev\
**Created:** [Mai 19, 2009, 2:06 UTC](https://forum.geekzone.fr/t/metaprogrammation-et-java/49606 "2009-05-19T14:06:03Z")\
**Posts on this page:** 9\
**Page:** 2

<div class="post-metadata">

**Author:** ![Berzehk](https://forum.geekzone.fr/user_avatar/forum.geekzone.fr/berzehk/32/1564_2.png) [@Berzehk](https://forum.geekzone.fr/u/Berzehk)\
**Post date:** [Juin 10, 2009, 4:31 UTC](https://forum.geekzone.fr/t/metaprogrammation-et-java/49606/21 "2009-06-10T04:31:07Z")

</div>

> [@Azhag](#):
>
> Par contre ne pas avoir d’accolades c’est vachement mieux au contraire, va me dire que c’est plus lisible d’avoir des accolades… Oui dans Python l’indentation est syntaxique, c’est vachement cool. Et ça force à indenter correctement, ce qui est cool si vous devez former des débutants…

perso l’indentation syntaxique ca me fait peur. Tu peux passer a la ligne quand bon te semble, genre quand t’as des parametres assez longs ?

---

<div class="post-metadata">

**Author:** ![Ivru](https://forum.geekzone.fr/user_avatar/forum.geekzone.fr/ivru/32/378_2.png) [@Ivru](https://forum.geekzone.fr/u/Ivru)\
**Post date:** [Juin 10, 2009, 6:46 UTC](https://forum.geekzone.fr/t/metaprogrammation-et-java/49606/22 "2009-06-10T06:46:57Z")

</div>

De plus en python il est interdit de mettre des commentaires.

ou pas.

---

<div class="post-metadata">

**Author:** ![Grouh](https://forum.geekzone.fr/user_avatar/forum.geekzone.fr/grouh/32/723_2.png) [@Grouh](https://forum.geekzone.fr/u/Grouh)\
**Post date:** [Juin 10, 2009, 8:34 UTC](https://forum.geekzone.fr/t/metaprogrammation-et-java/49606/23 "2009-06-10T08:34:04Z")

</div>

@Berzekh oui, of course, tu peux.

Franchement, l’argument d’illisibilité, je trouve ça un peu fatiguant, c’est un langage sur lequel on peut discuter des heures (comme tous…),  
Mais je dirais juste que c’est un des langages que j’ai pu apprendre le plus vite, et qu’avec l’expérience, je le trouve la syntaxe pratique et très lisible.

Oualou.

---

<div class="post-metadata">

**Author:** ![Baphomet](https://forum.geekzone.fr/user_avatar/forum.geekzone.fr/baphomet/32/155895_2.png) [@Baphomet](https://forum.geekzone.fr/u/Baphomet)\
**Post date:** [Juin 10, 2009, 11:47 UTC](https://forum.geekzone.fr/t/metaprogrammation-et-java/49606/24 "2009-06-10T11:47:47Z")

</div>

don’t feed the troll

---

<div class="post-metadata">

**Author:** ![Faskil](https://forum.geekzone.fr/user_avatar/forum.geekzone.fr/faskil/32/143898_2.png) [@Faskil](https://forum.geekzone.fr/u/Faskil)\
**Post date:** [Juin 10, 2009, 12:06 UTC](https://forum.geekzone.fr/t/metaprogrammation-et-java/49606/25 "2009-06-10T12:06:50Z")

</div>

À la base, le monsieur pose une question spécifique sur un problème de code, on n’est pas là pour engager un débat stérile (et puérile) sur “mon langage il roxx plus que le tien”. Si c’est pour poster autre chose qu’un élément de réponse, merci de vous abstenir.

Ça s’adresse particulièrement à ZGoblin, mais j’imagine que c’était inutile de le préciser.

---

<div class="post-metadata">

**Author:** ![Berzehk](https://forum.geekzone.fr/user_avatar/forum.geekzone.fr/berzehk/32/1564_2.png) [@Berzehk](https://forum.geekzone.fr/u/Berzehk)\
**Post date:** [Juin 10, 2009, 12:41 UTC](https://forum.geekzone.fr/t/metaprogrammation-et-java/49606/26 "2009-06-10T12:41:25Z")

</div>

/me range sa massue

Bubu, ca a répondu a tes questions mon code ou pas ?

---

<div class="post-metadata">

**Author:** ![Bussiere](https://forum.geekzone.fr/user_avatar/forum.geekzone.fr/bussiere/32/1193_2.png) [@Bussiere](https://forum.geekzone.fr/u/Bussiere)\
**Post date:** [Juin 18, 2009, 1:14 UTC](https://forum.geekzone.fr/t/metaprogrammation-et-java/49606/27 "2009-06-18T13:14:22Z")

</div>

[quote=“Berzehk, post:26, topic: 49606”]/me range sa massue

Bubu, ca a répondu a tes questions mon code ou pas ?[/quote]  
ouais faudra je suis toujours en train de l’analyser a froid  
merci  
bussiere

---

<div class="post-metadata">

**Author:** ![Bussiere](https://forum.geekzone.fr/user_avatar/forum.geekzone.fr/bussiere/32/1193_2.png) [@Bussiere](https://forum.geekzone.fr/u/Bussiere)\
**Post date:** [Août 5, 2010, 2:04 UTC](https://forum.geekzone.fr/t/metaprogrammation-et-java/49606/28 "2010-08-05T14:04:16Z")

</div>

Je suis tombé la dessus :  
[http://www.java2s.com/Tutorial/Java/0120\_\_Development/CompileString.htm](http://www.java2s.com/Tutorial/Java/0120__Development/CompileString.htm)  
mais j’ai un peu de mal a le comprendre

```auto
import java.lang.reflect.Method;
import java.net.URI;
import java.util.Iterator;
import java.util.NoSuchElementException;

import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
import javax.tools.ToolProvider;

public class CompileString {
  public static void main(String[] args) throws Exception {
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    String program = "class Test{" + " public static void main (String [] args){"
        + " System.out.println (\"Hello, World\");"
        + " System.out.println (args.length);" + " }" + "}";

    Iterable<? extends JavaFileObject> fileObjects;
    fileObjects = getJavaSourceFromString(program);

    compiler.getTask(null, null, null, null, null, fileObjects).call();
// c'est la ou je suis paumé
    Class<?> clazz = Class.forName("Test");
    Method m = clazz.getMethod("main", new Class[] { String[].class });
    Object[] _args = new Object[] { new String[0] };
    m.invoke(null, _args);
  }

  static Iterable<JavaSourceFromString> getJavaSourceFromString(String code) {
    final JavaSourceFromString jsfs;
    jsfs = new JavaSourceFromString("code", code);
    return new Iterable<JavaSourceFromString>() {
      public Iterator<JavaSourceFromString> iterator() {
        return new Iterator<JavaSourceFromString>() {
          boolean isNext = true;

          public boolean hasNext() {
            return isNext;
          }

          public JavaSourceFromString next() {
            if (!isNext)
              throw new NoSuchElementException();
            isNext = false;
            return jsfs;
          }

          public void remove() {
            throw new UnsupportedOperationException();
          }
        };
      }
    };
  }
}

class JavaSourceFromString extends SimpleJavaFileObject {
  final String code;

  JavaSourceFromString(String name, String code) {
    super(URI.create("string:///" + name.replace('.', '/') + Kind.SOURCE.extension), Kind.SOURCE);
    this.code = code;
  }

  public CharSequence getCharContent(boolean ignoreEncodingErrors) {
    return code;
  }
}
```

Bussiere

---

<div class="post-metadata">

**Author:** ![ZGoblin](https://forum.geekzone.fr/user_avatar/forum.geekzone.fr/zgoblin/32/152483_2.png) [@ZGoblin](https://forum.geekzone.fr/u/ZGoblin)\
**Post date:** [Août 5, 2010, 4:12 UTC](https://forum.geekzone.fr/t/metaprogrammation-et-java/49606/29 "2010-08-05T16:12:19Z")

</div>

> [@Bussiere](#):
>
> Je suis tombé la dessus :  
> [http://www.java2s.co…mpileString.htm](http://www.java2s.com/Tutorial/Java/0120__Development/CompileString.htm)  
> mais j’ai un peu de mal a le comprendre

La j’ai pas le temps, je regarde ça demain afin d’apporter un élément de réponse (et de ne pas me faire tapper par Faskil car il faut prendre ses menaces au sérieux même celles qui date de plus d’un an ! ![](http://static.geekzone.fr/ipb/public/style_emoticons/default/innocent.gif))

[Edit]

J’ai fais quelques tests mais rien de concluant (ça marche pô). désolé de ne pas pouvoir t’aider

[Page précédente](https://forum.geekzone.fr/t/metaprogrammation-et-java/49606.md?page=1)
