java在这种情况下扩展List<E>有用吗?
认为我有以下代码:
public interface Drawable {
public void compileProgram();
public Program getProgram();
public int getDataSize();
public FloatBuffer putData(final FloatBuffer dataBuffer);
public int getDataMode();
public void draw(final int offset);
public void delete();
public static int countDataSize(final Collection<Drawable> drawables) {
return drawables.stream()
.mapToInt(Drawable::getDataSize)
.sum();
}
public static FloatBuffer putAllData(final List<Drawable> drawables) {
FloatBuffer dataBuffer = BufferUtils.createFloatBuffer(countDataSize(drawables) * 3);
for (Drawable drawable : drawables) {
drawable.putData(dataBuffer);
}
return (FloatBuffer)dataBuffer.clear();
}
public static void drawAll(final List<Drawable> drawables) {
int offset = 0;
for (Drawable drawable : drawables) {
drawable.draw(offset);
offset += drawable.getDataSize();
}
}
public static void deleteAll(final List<Drawable> drawables) {
drawables.stream().forEach(Drawable::delete);
}
}
及
public class Terrain implements Drawable { ... }
public class Floor implements Drawable { ... }
我的用法如下:
private final Terrain terrain;
private final Floor floor;
private final List<Drawable> drawables;
public FPSGameController(final int screenWidth, final int screenHeight, final boolean debug) {
super(screenWidth, screenHeight, debug);
this.terrain = new Terrain();
this.floor = new Floor();
this.drawables = new ArrayList<>();
drawables.add(terrain);
drawables.add(floor);
}
...
@Override
protected void render(final double msDelta) {
super.render(msDelta);
glClearColor(25f / 255f, 25f / 255f, 112f / 225f, 1.0f);
glClearDepthf(1f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Drawable.drawAll(drawables);
}
那么,创建一个类是否是正确的方法:
public class DrawableList extends List<Drawable> { ... }
实现Drawable
接口中当前静态的功能
另外:我的实现目前是否执行了一些通常违反编码标准的实践
# 1 楼答案
在界面
Drawable
中使用静态方法似乎不错。据我所知,可以将静态方法写入接口(使用Java 8)以避免Collections
之类的静态类回答你关于
DrawableList
的问题,这可能是个坏主意。有两个原因:List<Drawable>
。但是当你想要实现一个ArrayList
、一个Stack
、一个LinkedList
或者其他任何东西来获得更好的性能时,你会很乐意保持当前的实现李>List<Drawable>
,请记住,如果不进行大量重构,你永远不会在程序中改变这一点。当你需要延长另一门课的时候(出于更好的原因),你什么也做不了李>不过,您可以创建一个对象
DrawableList
,它将操作一个列表:在这个类中,您可以通过定义自己的方法来调用
List
方法