Dal momento che hai menzionato in modo specifico JDK, penso che sia consentito menzionare un'API che in realtà non è disponibile nel JRE ed è anche meno conosciuta dalla maggior parte di noi: javax.tools
.
Ecco un frammento demo completa:
package test;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.net.URL;
import java.net.URLClassLoader;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
public class Test {
public static void main(String[] args) throws Exception {
// Prepare source somehow.
String source = "public class Test { static { System.out.println(\"test\"); } }";
// Save source in .java file.
File root = new File("/test");
File sourceFile = new File(root, "Test.java");
Writer writer = new FileWriter(sourceFile);
writer.write(source);
writer.close();
// Compile source file.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());
// Load compiled class.
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });
Class<?> cls = Class.forName("Test", true, classLoader); // Prints "test".
}
}
Utile? Non sono sicuro. Interessante? Sì, interessante sapere :)
Per il resto, mi piace il Collections, Reflection, Concurrent e JDBC API. Tutto ciò è già menzionato prima qui.
http://stackoverflow.com/questions/15496/hidden-features-of-java –
@Brian: è simile e ugualmente interessante, anche se la maggior parte ha a che fare con eccitamenti di sintassi ecc. Piuttosto che con classi standard –
è una domanda wiki della comunità, quindi perché è chiusa come soggettiva? –