java - 为什么我无法为这个泛型类传入某个参数?

标签 java generics

我有一个通用类 Parameter<T> :

@Data
public class Parameter<T> {
    private ParameterType<T> type;
    private String name;
    private String description;
    private boolean required = true;

    public Parameter(ParameterType<T> type, String name, String description, boolean required) {
        this.type = type;
        this.name = name;
        this.description = description;
        this.required = required;
    }
}

@Data 注释在编译时生成 getter(和非 final 字段的 setter)。 (参见 project lombok。)

注意,第一个字段是另一个泛型类ParameterType<T> ,但它是一个接口(interface):

public interface ParameterType<T> {
    String getParameterTypeName();
    T read(String arg) throws Exception;
    boolean isValid(String arg, CommandSender sender);
    String getError();
}

这个接口(interface)由AbstractParameterType<T>实现,它为以下方法提供了基本实现:[ getParameterTypeName() , isValid() , 和 getError() .] 因此,除非有要求,否则我不会在此处提供该代码。

上述类(class)供您引用。

我遇到的问题是我无法实例化一个新的 Parameter在课外。

我正在尝试以下代码:

(new Parameter<ParameterTypeBoolean>(new ParameterTypeBoolean(), "", "", false));

在哪里ParameterTypeBooleanAbstractParameterType<Boolean> 的实现,构造函数就是Parameter<T>中看到的构造函数.

编译器报告“Parameter() in Parameter cannot be applied to (the constructor)。具体来说,它提示 type 参数。

我看到的表格包括:

Expected Arguments                 | Actual Arguments                
--------------------------------------------------------------------
type: package.ParameterTypeBoolean | type: new ParameterTypeBoolean() (path)

我不确定这是怎么回事,或者如何解决这个问题。

也许某处存在逻辑错误?

关于这个问题,我引用了 Oracle 上的以下文章,但我一直无法诊断这个问题:Type Inference , 和 Generic Types .

最佳答案

ParameterTypeBoolean工具 ParameterType<Boolean> .因此,如果你想传递 ParameterTypeBoolean 的实例给构造函数

public Parameter(ParameterType<T> type, String name, String description, boolean required)

类型 T应该是 Boolean , 不是 ParameterTypeBoolean .

如果你这样做

new Parameter<Boolean>(new ParameterTypeBoolean(), "", "", false);

没有编译问题。 Here is the proof .

关于java - 为什么我无法为这个泛型类传入某个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33978687/

相关文章:

java - 删除 Android 工具栏的左边距

java - 如何使用xlink序列化xml标签:href

java - 为什么这段带有泛型的代码可以编译?

java - java中是否可以将父类设为Generic?

java - Jsoup 不能正常处理包含非字母字符的编码链接

java - 我怎样才能找到 BlackBerry 上的系统默认货币符号?

java - ImageButtons 不从主题样式获取属性

c# - Func<out TResult> 如何返回 Func<out TResult>?

java - 类的集合和继承

java - 泛型类实例的三种声明之间的区别