簡體   English   中英

Java,如何創建類似於Math的類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM