views:

111

answers:

3

I'm writing a class to represent a matrix. I want it to look something like this:

public class matrix {
    private int[][] matrix;
    private double[][] matrix;
    //And so on and so forth so that the user can enter any primitive type and
    //get a matrix of it
}

Is this legal code, or would I have to have different variable names based on the data types that their matrix holds?

+1  A: 

I think you are looking for Java Generics, a standard Java feature since Java 5.

The idea is that you would have generic Matrix class which can be specialised for any type you need.

There are plenty of tutorials, for example : here

djna
Please post comments as comments rather than answers.
danben
+1  A: 

What you have shown is not legal Java code. The approach you suggest (different names) would work, or you could take advantage of Java's object system, and use boxed values (such that the class member is just an Object) or generics, such that the type is a parameter.

Gian
+8  A: 

You can't overload variables. With your approach, you should give them different name, then overload the getMatrix method for different types.

A better approach is to use Java Generics:

public class Matrix<T> {
    private T[][] matrix;
    public T getMatrix() {return matrix;}
    ...
}

and then create objects of whatever types you want: Matrix<Integer>, Matrix<Double>, etc.

Amir Rachum
Thanks, this saves me from having to make a million different constructors and methods. Also, muy elegante!
Rafe Kettler