2013-07-08 35 views
0

我正試圖編寫一個glm在java中的移植。Java,如何創建類似於Math的類

目前,我創建了一個包jglm,這包裏面有所有不同類MAT4,Vec4,VEC3等。

如:

public class Mat { 

    protected float[] matrix; 
    protected int order; 
} 

我可以給他們打電話打字

jgml.Mat4 modelviewMatrix = new Jgml.Mat4(1.0f); 

這是很好..

現在我也寫了一些方法像

mix(x, y, lerp) 

而且我也想用這個作爲所說的那樣,是

但是,當然在這種情況下Jglm必須是類...

是否有將兩種東西結合在一起的方式?

編輯:如果我創建一個類jglm.Jglm

package jglm; 

/** 
* 
* @author gbarbieri 
*/ 
public class Jglm { 

    public class Mat { 

     protected float[] matrix; 
     protected int order; 
    } 

    public class Mat4 extends Mat { 

     public Vec4 c0; 
     public Vec4 c1; 
     public Vec4 c2; 
     public Vec4 c3; 

     public Mat4(float value) { 

      order = 4; 

      matrix = new float[16]; 

      for (int i = 0; i < 4; i++) { 
       matrix[i * 5] = value; 
      } 
      c0 = new Vec4(matrix, 0); 
      c1 = new Vec4(matrix, 4); 
      c2 = new Vec4(matrix, 8); 
      c3 = new Vec4(matrix, 12); 
     } 

     public float[] toFloatArray() { 
      return new float[]{ 
       c0.x, c0.y, c0.z, c0.w, 
       c1.x, c1.y, c1.z, c1.w, 
       c2.x, c2.y, c2.z, c2.w, 
       c3.x, c3.y, c3.z, c3.w,}; 
     } 
    } 

    public static float mix(float start, float end, float lerp) { 
     return (start + lerp * (end - start)); 
    } 
} 

當我嘗試實例

cameraToClipMatrix_mat4 = new Jglm.Mat4(1.0f); 

我得到 「需要包含Jglm.Mat4一個封閉的實例

+2

將方法聲明爲靜態 – Tala

回答

2

目前,我創建了一個包Jglm,這包裏面有所有不同類MAT4,Vec4,VEC3等。

在Java中,包必須在所有小寫字母來命名。按照你所做的方式命名它會讓任何看着你的代碼的人感到驚訝,並且還會給編譯器帶來嚴重的名稱解析問題。

它也習慣於導入我們正在使用的所有類,所以我們只是通過它們在代碼中的簡單名稱來引用它們。也許你可以考慮在客戶端上宣佈

package org.example.jglm; 

public class Jglm { 
    public static void mix(double x, double y, Lerp lerp) { 
    ... 
    } 
} 

,你會寫

import org.example.Jglm; 

void someMethod() { 
    Jglm.mix(x,y,lerp); 
} 

在一般情況下,當你需要在你的代碼中的一些純函數,然後將它們聲明爲static方法。請參閱java.lang.Math源代碼進行指導。

+0

好的,謝謝你的提名。我修改了它。 但是我仍然有問題,看看追加 – elect

+0

不要把其他類放在'Jglm'裏面。所有這些應該是同一個包中的頂級類。 –

+0

好的,所以最後我會有我的類,如jgml.Mat和方法jgml.Jgml.mix? – elect

2

Mat類中的所有方法聲明爲static

它們的聲明中有靜態修飾符,應該用類名調用,而不需要創建類的實例。

例:ClassName.methodName(args)

類方法http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

+0

但是接下來會是Mat.method – elect

+0

是的。確切地說,您期待什麼? –

+0

正如我寫的,Jglm.method – elect

1

在你的Jglm類靜態將使方法調用,都是由實例和通過類名的所有方法。

+0

如果我試圖複製和過去在Jgml類中的Mat,當我安裝Mat時,我得到「一個包含Jglm.Mat4的封閉實例是必需的」 – elect