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

*** Happy Friday ***

0