为什么 Netbeans 找不到接口实例的方法?

Why Netbeans does not find the methods of an interface instance?

我有一个 class:

public class JWHTMLPage implements JWDisplayable {
    ...
}

一个接口:

public interface JWDisplayable {
    
    public void addCSS(String link);
    public void addJS(String link);
    public void setViewport(String content);
    public void appendToBody(String html);
    public void updateHTML();
    
}

还有一个class:

public class JWHTMLPageMap<String, JWHTMLPage> implements Map<String, JWHTMLPage>, JWDisplayable {
    ...
}

在 JWHTMLPageMap 中,我覆盖了 addCSS 方法。问题是 NetBeans 的自动完成没有找到 JWHTMLPage:

的方法

它将页面视为一个对象,但它是一个 JWHTMLPage,它在 JWDisplayable 中实现了所有这些方法。我究竟做错了什么??没有意义。

你的问题肯定出在这行:

public class JWHTMLPageMap<String, JWHTMLPage> implements Map<String, JWHTMLPage>, JWDisplayable {

你可能没有编译错误,但它不正确,因为你正在使用现有的 classes,就好像它们是正式的通用参数,然后真正的 class 将被隐藏通用参数

所以改用:

public class JWHTMLPageMap<S extends String, J extends JWHTMLPage> implements Map<S, J>, JWDisplayable {

这可能会生成类似以下内容的警告:类型参数 S 不应受最终类型 String 的限制。 Final 类型无法进一步扩展(因为 String 是最终类型)

所以你为什么不直接写:

public class JWHTMLPageMap<J extends JWHTMLPage> implements Map<String, J> , JWDisplayable {