Java通用方法

ter*_*hau 2 java generics methods

我有一大堆定义这两个常量的类,例如:

public class Face
{
    public static final int LUMP_INDEX = 1;
    public static final int SIZE = 20;

    blah blah
}

public class Edge
{
    public static final int LUMP_INDEX = 5;
    public static final int SIZE = 32;

    blah blah
} 
etc.
Run Code Online (Sandbox Code Playgroud)

目前,我有一个函数为每个人创建该类的数组,使用类中定义的2个常量.

private Face[] createFaces(RandomAccessFile in)
{
    int numFaces = doSomeCalculations(Face.LUMP_INDEX, Face.SIZE);
    Face[] faces = new Face[numPlanes];

    blahblah;
    for(int i = 0; i < numFaces; i++)
        faces[i] = new Face();

    return faces;
}
Run Code Online (Sandbox Code Playgroud)

每个班级都有一个创造功能有点傻.唯一改变的是类类型.所以我想创建一个适用于上述任何类的基因方法.就像是:

private T[] create(RandomAccessFile in, Class T)
{
    int num = doSomeCalculations(T.LUMP_INDEX, T.SIZE);
    T[] faces = new T[numPlanes];

    blahblah;
    for(int i = 0; i < num; i++)
        faces[i] = new T();

    return faces;
}
Run Code Online (Sandbox Code Playgroud)

但是我不确定如何正确地做到这一点.任何帮助,将不胜感激.谢谢.

Mic*_*rdt 7

可以使用的唯一方法是使用反射通过类对象读取常量并Array.newInstance()创建数组.哦,方法签名必须如下所示:

private <T> T[] createFaces(RandomAccessFile in, Class<T> clazz)
Run Code Online (Sandbox Code Playgroud)

编辑 另一种解决方案是将常量保持在按类而不是静态字段键入的映射中.Java只是不够动态,尤其是在类级别上,以干净利落的方式完成它.

  • @Tom:鼓励在没有改进任何东西的情况下使用设计模式作为灵丹妙药并不是更好. (2认同)