gpt4 book ai didi

java - 构造函数参数中的泛型

转载 作者:行者123 更新时间:2023-12-01 23:14:07 24 4
gpt4 key购买 nike

我知道这是一个非常愚蠢的问题,因为我曾经知道这样的事情。但我现在很难完成这件事。我有一个类的构造函数,它应该得到一个 ArrayList,其中填充了实现我的名为 CollisionObserver 的接口(interface)的对象。这是我的构造函数头:

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);
}
}

这是我调用构造函数的方式。我在两个不同的类(class)中这样做。第一类:

private ArrayList<Picture> picList = new ArrayList<Picture>();

“Picture”类型实现了 CollisionObserver 接口(interface)

 Cursor finger = new Cursor(gl, lfl[i], listener.getFl().get(i).direction(), 0.5f, picList.size(), picList);

第二类也是如此。 Type Shelf 实现了 CollisionObserver 接口(interface):

    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 包含类型绑定(bind)到此类的元素,则此处使用 T 比较合适。

从表面上看,您需要一个仅实现 CollisionObserver 的对象列表,因此这将是您想要的声明:

ArrayList<? extends CollisionObserver>

关于java - 构造函数参数中的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21484524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com