我知道这是一个非常愚蠢的问题,因为我曾经知道这样的东西。但是我现在很难完成这项工作。我有一个类的构造函数,应该得到一个ArrayList,该数组填充有实现我称为CollisionObserver的接口的对象。这是我的构造函数负责人:
public Cursor(GL gl, LibraryFinger finger, Vector direction, float radius,
int index, ArrayList<T extends CollisionObserver> observerList)
谁能告诉我在哪里犯了大错误?我也尝试ArrayList<CollisionObserver>
过,但这也行不通,因为当我用实现CollisionObserver的对象调用构造函数时,错误消息显示该构造函数未定义。
好的,这是完整的Cursor类:
public class Cursor implements CollisionSubject{
private Vector direction;
private GL gl;
private float radius;
private LibraryFinger finger;
private GLUT glut;
protected static float[] sphere_center = new float[3];
private ArrayList<CollisionObserver> observer = new ArrayList<CollisionObserver>();
public Cursor(GL gl, LibraryFinger finger, Vector direction, float radius, int index, ArrayList<T extends CollisionObserver> observerList){
this.gl = gl;
this.finger = finger;
this.direction = direction;
this.radius = radius;
glut = new GLUT();
//Finetuning for fingermovements! The vector delivered by the LeapListener is to be considered as
//raw-data. It has to be adjusted to the environment in which the fingertracking is used.
sphere_center[0] = (float) (finger.getX()/15);
sphere_center[1] = (float) ((finger.getY()/20)*-1);
sphere_center[2] = (float) (finger.getZ()/5);
gl.glTranslatef(sphere_center[0], sphere_center[1], sphere_center[2]);
gl.glEnable(GL.GL_CULL_FACE);
gl.glCullFace(GL.GL_BACK);
gl.glColor3f(0.757f, 0.804f, 0.804f);
glut.glutSolidSphere(radius, 16, 16);
for (int i = 0; i < index; i++){
registerCollisionObserver(observerList.get(i));
}
myPosition();
}
@Override
public void registerCollisionObserver(CollisionObserver o) {
observer.add(o);
}
@Override
public void removeCollisionObserver(CollisionObserver o) {
if (!observer.isEmpty()) {
int i = observer.indexOf(o);
if (i >= 0)
observer.remove(i);
}
}
@Override
public void myPosition() {
for (int i = 0; i < observer.size(); i++) {
CollisionObserver o = observer.get(i);
o.collision(finger, direction, radius);
}
}
这就是我调用构造函数的方式。我在两个不同的班级中这样做。头等舱:
private ArrayList<Picture> picList = new ArrayList<Picture>();
类型“图片”实现了接口CollisionObserver
Cursor finger = new Cursor(gl, lfl[i], listener.getFl().get(i).direction(), 0.5f, picList.size(), picList);
第二课也一样。Type Shelf实现CollisionObserver接口:
private ArrayList<Shelf> shelfList = new ArrayList<Shelf>();
Cursor finger = new Cursor(gl, lfl[i], listener.getFl().get(i).direction(), 0.5f, shelfList.size(), shelfList);
在构造函数参数之一中,您需要声明以下内容:
ArrayList<T extends CollisionObserver>
哪里T
来的?如果要ArrayList
使它包含与该类类型绑定的元素,则在T
此处使用适当。
从表面上看,您需要一个仅实现的对象的列表CollisionObserver
,因此这将是您想要的声明:
ArrayList<? extends CollisionObserver>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句