2016-12-29 8 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

Вы не можете использовать Generics.

Кажется, параметр конструктора вместо каждого экземпляра или каждый класс, имеющий метод, возвращающий размер вектора

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

Смежные вопросы