小编Ama*_*Mas的帖子

限制泛型类型参数以具有特定构造函数

我想知道为什么泛型类型参数的新约束只能在没有参数的情况下应用,也就是说,可以将类型约束为具有无参数构造函数,但是不能将类约束为具有构造函数,接收一个int作为参数.我知道这方面的方法,使用反射或工厂模式,工作正常,好吧.但我真的很想知道为什么,因为我一直在思考它,我真的想不出无参数构造函数和带有参数的区别,这些参数可以证明对新约束的这种限制.我错过了什么?非常感谢


论点1:构造函数是方法

@Eric:让我和你在一起一会儿:

构造函数是方法

那么我想如果我这样做,没有人会反对:

public interface IReallyWonderful
{
    new(int a);

    string WonderMethod(int a);
}
Run Code Online (Sandbox Code Playgroud)

但是一旦我有了,那我就去:

public class MyClass<T>
        where T : IReallyWonderful
{
    public string MyMethod(int a, int b)
    {
        T myT = new T(a);
        return myT.WonderMethod(b);
    }
}
Run Code Online (Sandbox Code Playgroud)

这首先是我想要做的.所以,抱歉,但不,构造函数不是方法,或者至少不完全.

关于实现这个功能的困难,我真的不知道,即使我这样做了,我对于明智地支出股东资金的决定也没什么可说的.这样的话,我会马上把它标记为答案.

从学术(我)的角度来看,也就是说,没有任何关于实施成本的问题,问题确实是(我在最近几个小时内完成了这个问题):

构造函数应该被视为类的实现的一部分,还是作为语义契约的一部分(以同样的方式将接口视为语义契约).

如果我们将构造函数视为实现的一部分,那么,约束泛型类型参数的构造函数不是一件非常通用的事情,因为这会将你的泛型类型绑定到具体的实现,并且几乎可以说为什么完全使用泛型?

作为实现的一部分的构造函数的示例(在指定任何下面的构造函数作为定义的语义契约的一部分时没有意义ITransformer):

public interface ITransformer
{
    //Operates with a and returns the result;
    int Transform(int a);
}

public class PlusOneTransformer : ITransformer
{
    public int Transform(int a)
    {
        return a …
Run Code Online (Sandbox Code Playgroud)

c# generics constraints new-operator

19
推荐指数
2
解决办法
5641
查看次数

jini入门套件2.1用于安装blitz javaSpaces

我需要设置闪电战JavaSpaces (这里).在Blitz安装指南中,其中一个必需的软件包是JINI 2.1的入门套件,但提供的链接已损坏,我似乎无法在其他任何地方找到它.我一直在看Apache River Project,¿我应该安装这个而不是缺少JINI 2.1吗?根本没有或几乎没有任何文档,这真的让我觉得闪电战正在破坏其先决条件之一的链接.这让我想到了另一个问题 - 闪电战的实施是否可靠?

非常感谢

java jini javaspaces

6
推荐指数
1
解决办法
745
查看次数

标签 统计

c# ×1

constraints ×1

generics ×1

java ×1

javaspaces ×1

jini ×1

new-operator ×1