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

标签 java inheritance linked-list

我对 java 泛型有一个非常令人困惑的问题。我以前从未尝试过这些泛型类,但我决定尝试一下。 我创建了自己的 LinkedList 类,可以创建任何对象的列表结构。

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 方法只能从继承 self 的其他类之一(有名称)的对象访问,因为我计划将 LinkedList 可由任何对象,但该方法只能由某些对象执行。我怎样才能实现这个目标? (为了澄清我的问题,我想阻止对象获取此方法,我知道我可以使用 instanceof )

最佳答案

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

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

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

关于java - 使方法只能被模板类中的某些对象访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34885960/

相关文章:

c++ - 友元是在 C++ 中继承的吗?

C从文件中读取链表并写入另一个文件

C: typedef 结构中的函数指针

java - 如何通过Eclipse RCP连接Mysql

java - 如何获取当前运行 Java Applet 的网页的 URL?

java - 创建一个扩展类的类,并在 clojure 中覆盖

data-structures - 如何在 fortran 2003-2008 中实现链表

java - 由于违反约束,节点 setProperty 在 Magnolia CMS 中给出 RepositoryException

javascript - JavaScript 中的隐私

c++ - 创建一个继承自另一个类的类?