12/08/2018, 16:20
Load class at runtime
Giả sử có một class ở đâu đó mà hiện tại trong project chưa sử dụng được, hoặc bạn muốn có 1 class không nằm trong project, và khi bạn muốn sử dụng nó, bạn sẽ cần load class at runtime. Trong ví dụ này sẽ sử dụng 2 class là Test và Main như sau: Test.java: public class Test { public ...
- Giả sử có một class ở đâu đó mà hiện tại trong project chưa sử dụng được, hoặc bạn muốn có 1 class không nằm trong project, và khi bạn muốn sử dụng nó, bạn sẽ cần load class at runtime.
- Trong ví dụ này sẽ sử dụng 2 class là Test và Main như sau:
Test.java:
public class Test {
public static final String VALUE = "2days";
}
Main.java
import java.io.File;
import java.lang.reflect.Field;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class Main {
public static void main(String[] args) {
File file = new File("C:UsersPublicTest");
try {
ClassLoader classLoader = new URLClassLoader(new URL[]{file.toURL()});
Class clazz = classLoader.loadClass("Test");
Field field = clazz.getField("VALUE");
System.out.println("value = " + field.get(null));
} catch (MalformedURLException | ClassNotFoundException |
SecurityException | NoSuchFieldException |
IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
Path (trên Window):
C:UsersPublicTestTest.java
C:UsersMainMain.java
- Đầu tiên thì load class thì phải là file .class, chứ file .java thì nó sẽ ko load được, vì vậy cần phải tạo ra file class từ java, ở đây là Test.class từ Test.java -> dùng lệnh javac <className.java> sẽ tạo ra file .class.
- Để test thì lần lượt dùng các lệnh sau (test Main bằng cmd luôn cho tiện):
C:UsersPublicTest>javac Test.java // generate Test.class
................
C:UsersPublicMain>java Main // run Main
-> Result: value = 2days
