【问题标题】:java generic bound type-why does extends only mean extending the classes and implementing the interface?java泛型绑定类型——为什么extends只意味着扩展类和实现接口?
【发布时间】:2014-08-13 22:37:31
【问题描述】:

我现在正在学习 Java 中的泛型类型。为了限制传递给类型参数的类型参数,我们使用关键字“extends”。它意味着要么“扩展”(如在类中)或“实现”(如在接口中)。我不明白为什么它不能意味着“扩展”界面?

【问题讨论】:

  • ...也许是因为您不“扩展”接口?正如您所说,您“扩展”类和“实现”接口。这些是正确的术语。
  • 这只是 Java 使用的术语。 Java 对类使用“扩展”,对接口使用“实现”。您可能想在教程网站上查看一些基本的 Java 语法。
  • 如果我误解了你的问题,请纠正我,但据我所知,你自己回答了。
  • @Jashaszun 我猜他的意思是当接口A扩展接口B时; @Jie 我认为那里的术语只是让您要求您的泛型类型必须是您指定的任何类或接口的子类型,这意味着无需区分类和接口。
  • 是的,我知道类可以“扩展”类并实现接口,而接口只能“扩展”接口。如果我写:public class A ,我可以传递给T的类型参数只能是实现interface1的类,但我想知道为什么它不能是扩展interface1的接口?

标签: java


【解决方案1】:

接口只扩展了另一个接口...类实现了接口 唯一扩展接口的类是抽象类

【讨论】:

    【解决方案2】:

    是的,您可以在指定(正确的术语是什么?)泛型类型时使用接口(我必须回答才能发布代码):

    class MyGeneric<T extends MyBaseInterface> {
    
    }
    
    interface MyBaseInterface {
    
    }
    
    interface MySubInterface extends MyBaseInterface {
    
    }
    
    
    public class GenericsTest {
    
        private MyGeneric<MySubInterface> x = new MyGeneric<>();
    
    }
    

    正如我在上面的评论中所说,&lt;T extends X&gt;“扩展”只是要求 T 是 X 的子类型(其中 X 可以是类或接口)的一种方式。

    【讨论】:

    • 这回答了我的问题。非常感谢!
    猜你喜欢
    • 2014-04-03
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 2013-01-16
    相关资源
    最近更新 更多