我对java泛型有一个非常令人困惑的问题。我以前从未尝试过这些泛型类,但我决定试一试。我创建了自己的 LinkedList 类,该类可以使任何对象的 List 结构。
public class LinkedList<T> {
private Node first, last;
private int size;
private class Node {
T data;
Node next;
public Node(T data) {
this.data = data;
next = null;
}
}
...
public int seek(String name) {
int i = -1;
int counter = 0;
Node t = first;
while(t != null) {
if(t.data.toString().equals(name)) {
i = counter;
break;
}
counter++;
t = t.next;
}
return i;
}
我希望 seek 方法只能从从我的其他类之一(具有名称)继承的对象访问,因为我计划让 LinkedList 可供任何对象使用,但该方法只能由某些对象使用。我怎样才能做到这一点?(为了澄清我的问题,我想阻止对象获取此方法,我知道我可以使用instanceof
)
与其使用复杂的、黑客式的反射技巧,不如在没有任何其他类的情况下将这两个类放在一个包中(除非其他类是您不介意能够访问此方法的类)?如果是这样,请将seek()
包设置为受保护(无访问修饰符)。然后,在您的其他类中,添加如下声明:
protected static int seek(LinkedList<?> list, String name) {
return list.seek(name);
}
protected
修饰符可确保访问仅限于类的子类。他们实际上不能以通常的语法在 LinkedList
类的实例上调用它,但这也可以。