![](/img/trans.png)
[英]Create an instance for the class Scanner, but not for Math class in java?
[英]Java, how to create a class similar to Math
我試圖在Java中編寫glm的移植。
目前,我創建了一個包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)
我也想使用這個,即
float value = jglm.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是必需的一個封閉實例 ”
將Mat
類中的所有方法聲明為static
在聲明中具有static修飾符的元素,應使用類名調用,而無需創建類的實例。
例如: ClassName.methodName(args)
請參見http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html中的 類方法
目前,我創建了一個包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
源代碼以獲取指導。
將Jglm類中的所有方法設置為靜態將通過實例和類名啟用方法調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.