我有一个通用类 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));
在哪里ParameterTypeBoolean
是 AbstractParameterType<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/