私は次のコードを持っています。これ<T extends Buffer>
は、本当に意味することを理解しているので、今日これにリファクタリングしたばかりです。簡略化されたバージョンは次のとおりです。
public class Buffer {
protected final int bufferType;
protected final int bufferDataType;
protected int bufferId;
protected boolean created;
public Buffer(final int bufferType, final int bufferDataType) {
this.bufferType = bufferType;
this.bufferDataType = bufferDataType;
}
public <T extends Buffer> T create() {
assertNotCreated();
bufferId = GL15.glGenBuffers();
created = true;
return (T)this;
}
public boolean hasBeenCreated() {
return created;
}
private void assertNotCreated() {
if (hasBeenCreated()) {
throw new RuntimeException("Buffer has been created already.");
}
}
}
public class ArrayBuffer extends Buffer {
public ArrayBuffer(final int bufferDataType) {
super(GL15.GL_ARRAY_BUFFER, bufferDataType);
}
}
public class DynamicDrawArrayBuffer extends ArrayBuffer {
public DynamicDrawArrayBuffer() {
super(GL15.GL_DYNAMIC_DRAW);
}
}
で警告が発生しました。Buffer.create()
警告を抑制しても安全ですか? より安全にする方法はありますか?
もう 1 つの要件は、この API の呼び出し/使用コードに乱雑さを追加しないことです。具体的には、これは、DynamicDrawArrayBuffer
ジェネリックがアタッチされていない可能性があることを意味します。