为什么下面的代码有错误?为什么重载不成功?

发布于 2024-10-07 21:32:11 字数 720 浏览 3 评论 0原文

// signatures of the reset method at //1 and //2 after erasure will be different
// then why don't they overload?

public class Test<T>{
    public static void main(String[] args) { 
        WordBox<String> city = new WordBox<String>("Skogland"); 
        city.reset("waiting");  // error: ambiguous 
    }
}


class Box <T> { 
    private T theThing; 
    public Box( T t) { theThing = t; } 
    public void reset( T t) { theThing = t; } //1  
} 

class WordBox< S extends CharSequence > extends Box< String > {
    public WordBox( S t)    { super(t.toString().toLowerCase()); }
    public void reset( S t) { super.reset(t.toString().toLowerCase()); }  //2
}
// signatures of the reset method at //1 and //2 after erasure will be different
// then why don't they overload?

public class Test<T>{
    public static void main(String[] args) { 
        WordBox<String> city = new WordBox<String>("Skogland"); 
        city.reset("waiting");  // error: ambiguous 
    }
}


class Box <T> { 
    private T theThing; 
    public Box( T t) { theThing = t; } 
    public void reset( T t) { theThing = t; } //1  
} 

class WordBox< S extends CharSequence > extends Box< String > {
    public WordBox( S t)    { super(t.toString().toLowerCase()); }
    public void reset( S t) { super.reset(t.toString().toLowerCase()); }  //2
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

水中月 2024-10-14 21:32:11

java.lang.String 扩展了 CharSequence,因此调用 city.reset("waiting")WordBox.reset(S extends CharSequence)Box.reset(String)

要解决此问题,您应该确保 WordBox.reset() 接受与 Box.reset() 相同的类型,在这种情况下 WordBox.reset() 覆盖 Box.reset(),或者相反,确保 WordBox.reset() 接受与 Word.reset 不重叠的类型(),在这种情况下,WordBox.reset() 会重载 Box.reset()。在您给出的示例中,我感觉您可能希望 WordBox.reset() 覆盖 Box.reset()

java.lang.String extends CharSequence, so calling city.reset("waiting") matches both WordBox.reset(S extends CharSequence) and Box.reset(String).

To fix the problem, you should either ensure WordBox.reset() accepts the same type as Box.reset(), in which case WordBox.reset() overrides Box.reset(), or, conversely, make sure WordBox.reset() accepts a type that does not overlap with Word.reset(), in which case WordBox.reset() overloads Box.reset(). In the example you give, I get the feeling you'd probably want WordBox.reset() to override Box.reset().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文