使方法只能访问模板类中的某些对象

时间:2016-01-19 20:04:55

标签: java inheritance linked-list

我对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

1 个答案:

答案 0 :(得分:2)

不是使用复杂的,反复的反射技巧,你可以将这两个类放在一个没有任何其他类的包中(除非其他类是你不介意能够访问这个方法的类)吗?如果是,请使seek()受包保护(无访问修饰符)。然后,在您的其他类中,添加如下声明:

protected static int seek(LinkedList<?> list, String name) {
    return list.seek(name);
}

protected修饰符可确保访问仅限于您的类的子类。他们实际上不能用通常的语法在LinkedList类的实例上调用它,但这也可以。