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