【发布时间】:2014-11-25 18:30:29
【问题描述】:
我想为我的参数值创建一个泛型类并使用接口方法返回其内容,但是我遇到了一个关于没有匹配返回类型的编译错误。有没有办法来解决这个问题?我的代码如下:
public class Parameter
{
public Parameter(String name, int value)
{
this.name = name;
this.type = eType.typeInt;
this.parameterValue = new ParameterValueTemplate<int>(value);
}
public Parameter(String name, double value)
{
this.name = name;
this.type = eType.typeDouble;
this.parameterValue = new ParameterValueTemplate<double>(value);
}
public interface IParameterValue
{
int GetValue();
}
class ParameterValueTemplate<T> : IParameterValue
{
public ParameterValueTemplate(T value)
{
this.value = value;
}
public T GetValue()
{
return value;
}
T value;
}
public String name;
public IParameterValue parameterValue;
}
【问题讨论】:
-
你的界面也必须是通用的。它抱怨可能是因为您需要
int作为任何通用参数值模板的接口的返回类型。 -
呃。你为什么要嵌套一个界面。这完全违背了界面的意义!
-
@BradleyDotNET,一个接口暴露了一个契约——可能向外部世界——也可能向你自己的库的内部类。也许你是不切实际的,你将一堆相关的接口分组在一个
Interfaces类中。 我不会推荐它,但它不会改变语义、功能、行为,或者坦率地说,关于接口或其实现的任何内容。 -
@PedroNF:“接口需要隐藏值的类型”——即使作为非泛型,它也不能这样做。您要么使其通用,要么选择一种类型。无论哪种方式,值的类型都是已知的。完全忽略值类型的唯一方法是使用
object作为类型。也就是说,我的建议没有任何要求Parameter类型是通用的;只是接口和实现类型(反正你已经通用了)。 -
我觉得这个问题受到XY problem的影响。也许如果你能解释一下你需要这种功能的目的,你就能得到更好的答案。