2016-05-21 5 views
1

Ich habe SchnittstelleObject Schnittstelle in Java

public interface Arithmetic { 
    Object sum(Object o); 
} 

und ich brauche eine Summenfunktion in der Matrix-Klasse zuweisen

public class Matrix implements Arithmetic{ 
int[][] data; 
public Matrix ... 
public Object sum(Object o){ 
// then I have to add two matrix 
} 
} 

Bitte sagen Sie mir, wie kann ich zwei Matrizen hinzufügen, wenn die erste Matrix Typ int [] [], während der zweite Typ Object

Antwort

6

Make Arithmetic generic:

public interface Arithmetic<T> { 
    T sum(T o); 
} 

dann MatrixArithmetic<Matrix> machen implementieren:

@Override public Matrix sum(Matrix o){ 

dann können Sie die Matrixeigenschaften von o zugreifen.

Beachten Sie, dass Sie den Entwurfsreiniger finden könnten, wenn Sie Ihre Operationen in eine separate Klasse verschieben, z.

class MatrixArithmetic { 
    static Matrix sum(Matrix a, Matrix b) {...} // Element-wise addition of matrices. 
    static Matrix sum(Matrix a, int constant) {...} // Add constant to all elements 
} 

Ich würde sagen, das ist ein besseres Design, weil:

  • Es die arithmetischen Implementierungen von der Implementierung der Datenstruktur declutters;
  • Es ermöglicht Ihnen, verschiedene sum Methoden zu haben; implements Arithmetic<Matrix> schließt implements Arithmetic<Integer> aus (nur als Beispiel);
  • Sie können "neue" arithmetische Methoden hinzufügen, die Sie aus bestimmten Gründen benötigen, ohne die Klasse Arithmetic ändern zu müssen, um eine bessere Modularisierung Ihrer Algorithmen zu ermöglichen.