2016-12-29 90 views
1

是否有可能在Java中創建「通用」類,將取決於一些參數(而不是類型)?例如:的Java類依賴於某些參數

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

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

     //... 
} 

對於每個整數n,它將模擬具有n個分量的實數向量。 如果不是,Java中是否有類似的東西?

+2

否,該功能被稱爲任一類型的級文字或[依賴打字](https://en.wikipedia.org/wiki/Dependent_type ),取決於你想採取多遠。 Java不支持它。 –

回答

3

不完全泛型,但你肯定可以實現通過傳遞n作爲構造函數的參數。

class RVector 
{ 
    double[] v; 

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

從構造函數中刪除'',請! – mre

+1

@mre完成,謝謝。 –

0

您不能使用泛型。

似乎是一個構造符參數,而不是每個實例或每個類具有返回向量的大小的方法

2

Java的泛型是不完全一樣的模板。因此,您無法在<>中輸入值。它必須是一個類型。此

一種解決方法是通過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) { ... } 
} 
+0

@SotiriosDelimanolis是不是有什麼毛病我的英語?很抱歉,如果我得到了一些語法錯誤... – Sweeper

+0

@SotiriosDelimanolis哦哎呀!感謝您指出了這一點!編輯。 – Sweeper