java - 该方法未定义类型 Class<capture#3-of ?扩展命令>

标签 java generics casting abstract-class subclass

我有抽象类

package main;

public abstract class Command {
    protected final String key;

    public Command(String key) {
        this.key = key;
    }

    public abstract void function(String[] args);
    public abstract void help();
}

但是当我尝试调用方法时 function(String[] args) ,尽管以一种令人困惑和过于复杂的方式,问题接踵而至。


Class<? extends Command> x = (Class<? extends Command>) Class.forName(
        "main.Commands$" +
        String.valueOf(command.toCharArray()[0]).toUpperCase() +
        command.substring(1).toLowerCase()
);

x.function(args);

给我错误 The method function(String[]) is undefined for the type Class<capture#3-of ? extends Command>

我也尝试了以下方法:

Command x = (Command) Class.forName(
        "main.Commands$" +
        String.valueOf(command.toCharArray([0]).toUpperCase() +
        command.substring(1).toLowerCase()
);

但这只是给了我 Cannot cast from Class<capture#1-of ?> to Command .

我为我糟糕的命名提前道歉。

最佳答案

Class.forName正在返回 Class<?>对象,不是 Command .您需要使用 Class<?> 中的构造函数之一创建命令对象。

Class<Command> klass = (Class<Command>) Class.forName(
    "main.Commands " +
    String.valueOf(command.toCharArray([0]).toUpperCase() +
    command.substring(1).toLowerCase()
);

Command x = klass.newInstance();

或者您可以使用 klass.getConstructor(...)方法

关于java - 该方法未定义类型 Class<capture#3-of ?扩展命令>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22290467/

相关文章:

java - Class.getSimpleName() 与在 Java 中硬编码类名?

c# - 将泛型但已知为可空枚举类型转换为可空 int

c# - 如何将参数子字符串转换为 C# 中的列类型?

c++ - 使用模板化声明时可能丢失基本对象的方法

java - 在 maven 的 docker 中运行的 mysql 图像上的 liquibase 脚本用于集成测试

java - java3D lib 配置的问题

Java 8 流 : Map the same object multiple times based on different properties

C#-like 泛型,C++ 中的模板类型约束

Java 泛型返回类型

java - Java 中的转换和继承