【问题标题】:Java Class dependent on some parameter依赖于某些参数的 Java 类
【发布时间】:2016-12-29 00:00:35
【问题描述】:

是否可以在 Java 中创建依赖于某个参数(而不是类型)的“通用”类?像这样的:

 class RVector<int n>
 {
      double[] v = new double[n];

      public RVector<int n>(double[] d){
      //...
      }

      //...
 }

对于每个整数 n 将模拟一个具有 n 个分量的实向量。 如果没有,Java中是否有类似的东西?

【问题讨论】:

  • 不,该功能被称为类型级文字或dependent typing,具体取决于您想要多远。 Java 不支持。

标签: java class generics


【解决方案1】:

不完全是泛型,但您确实可以通过在构造函数中传递 n 作为参数来实现。

class RVector
{
    double[] v;

    public RVector(double[] d, int n) {
        this.v = new double[n];
        //...
    }
    //...
}

【讨论】:

  • 请从构造函数中删除&lt;int n&gt;
【解决方案2】:

Java 的泛型与模板并不完全相同。因此,您不能在&lt;&gt; 中输入值。它必须是一个类型。

一种解决方法是将n 传递给构造函数:

public RVector(int n, double[] d) {
    ...
}

但是有了这个,你不能在编译时确保“类型安全”,更不用说你不能将double[]的长度限制为n

另一种解决方法是创建多个矢量类:

public class Vector1D {
    public Vector1D(double value) { ... } 
}

public class Vector2D {
    public Vector2D(double value1, double value2) { ... }
}

public class Vector3D {
    public Vector3D(double value1, double value2, double value3) { ... }
}

【讨论】:

  • @SotiriosDelimanolis 我的英语有问题吗?对不起,如果我有一些语法错误......
  • @SotiriosDelimanolis 哦,哎呀!感谢您指出了这一点!已编辑。
【解决方案3】:

你不能使用泛型。

似乎是构造函数参数,而不是每个实例或每个类都有返回向量大小的方法

【讨论】:

    猜你喜欢
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多