java - 从文件夹中选择 .class 文件

标签 java

我有一个接口(interface) Operator,它有一个方法,如下所示:

public interface Operator
{
    double calculate(double firstNumber,double secondNumber);
}

然后我有四个类(加、减、除、乘)实现运算符,如下所示:

public class Plus implements Operator
{   
    public double calculate(double firstNumber,double secondNumber)
    {
        return firstNumber + secondNumber;
    }
}
public class Minus implements Operator
{
    public double calculate(double firstNumber,double secondNumber)
    {
        return firstNumber - secondNumber;
    }
}

等等... 对于处理运算符,我使用 Map :

    private static Map<String,Operator> operatorMap = new HashMap<String,Operator>();
    static
    {
        operatorMap.put("+", new Plus());
        operatorMap.put("-", new Minus());
        operatorMap.put("*", new Multiply());
        operatorMap.put("/", new Divide());
    }
double output = 0;
output = operatorMap.get(elementInExpression[2]).calculate(firstNumber,secondNumber);

现在我想更改我的应用程序以动态工作,如果我实现其他类,例如 % 我的应用程序仍然可以工作。为此,我将 .class 文件放在一个文件夹中。我想从 .class 文件中自动选择。我认为我应该使用 Reflection API。谁能帮我使用这个 API?(不要使用 Reflections,因为它不是 java Reflection API 的一部分)

最佳答案

  • 您需要将 public static String operator = "*"; 变量添加到您的运算符类中。

在特定目录中执行

File f = "\\classesfolder\\";

ClassLoader loader = new URLClassLoader(new URL[] { f.toURI().toURL() }, getClass().getClassLoader(););

FilenameFilter filter = new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.endsWith(".class");
    }
  };
for (File classFile : f.listFiles(filter)) {
    try {
        // Remove the file extension
        String filename = classFile.getName().substring(0, filename.length() - 6);
        Class<? implements Operator> cls = loader.loadClass(filename);
        Operator operatorClass = (Operator) cls.newInstance();
        operatorMap.put(operatorClass.operator, operatorClass);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

关于java - 从文件夹中选择 .class 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32180000/

相关文章:

java - 将具有本地依赖的 Maven 项目部署到 WildFly

java - 如何从 MIB 获取 DisplayString 大小约束?

java - java中的随机生成方法看起来并不随机

java - 通过 Java 程序禁用 Ctrl-Alt-Delete 事件

java - 重用 SQLite 连接还是每次都重新连接?

java - 将页面添加到现有PDF com.itextpdf.text.exceptions.InvalidPdfException : PDF header signature not found

java - 如何在 google map v2 for android 中显示标记旁边的文本

java - 如何在 Java 中将字符串数组拆分为单独的数组

java - 从 csv 文件中打乱问题并将数字放在它们前面

java - 编译器和运行时系统如何处理java中的嵌套类型?