【问题标题】:Understanding some concepts [closed]理解一些概念[关闭]
【发布时间】:2013-06-19 20:07:10
【问题描述】:

我是 java 新手,正在尝试理解以下代码。

public class Foo extends Bar<Type, Type2> {

  @Override
  public SomeFoo<Type, Type2> getReader(Type type) throws IOException {
    return new SomeInstance(type);
  }
}

我想了解什么是public SomeFoo

它不是一个类??它是构造函数吗?为什么它会返回一些东西?

什么时候做

Foo foobar = new Foo()

foobar 是什么?

Bar&lt;Type,type2&gt; 是什么?为什么要使用这些箭头括号?

【问题讨论】:

  • 嗯。开始here
  • 我认为 OP 需要比泛型更早开始。 Here perhaps
  • @BoristheSpider:我看到泛型回答了第二个查询,但什么是 public SomeFoo ?
  • public someFoo(...) 只是一个普通的公共方法,返回另一个类的实例 someInstance - 通常用于只有一些静态方法的内部类。
  • @AndrewGibson 我认为问题是“foobar 的通用类型是什么”,但看来你是对的。首先是 Java 基础,然后是泛型。

标签: java oop generics methods constructor


【解决方案1】:

SomeFoo 是一种类型。这个特殊的使用 Java 泛型,这里有一些关于它的更多信息:http://docs.oracle.com/javase/tutorial/java/generics/index.html

Bar 也是一个类型,这里是类 Foo 的基类。箭头括号用于使类通用以备用重复项。认为它就像您拥有布尔值列表一样。此列表与列表整数值有何不同?这里只有条目的类型不同,所以编程语言允许我们从中抽象出来:

List<Boolean> booleans = ...;
List<Integer> integers = ...;

查看类 java.util.List 的 Javadoc 和/或源代码以了解更多信息。

【讨论】:

    【解决方案2】:

    public SomeFoo&lt;Type, Type2&gt; getReader(Type type) 是从Bar 类继承的方法。我们知道它是从Bar 继承的,因为在类定义中使用了extends

    Foo foobar = new Foo() 创建一个Foo 对象,foobar 是引用该对象的方法。

    括号&lt;&gt; 表示Java 中的泛型。

    深入了解泛型是什么以及它们如何操作的细节超出了本主题的范围。我建议和其他人一样,在这里阅读它们http://docs.oracle.com/javase/tutorial/java/generics/why.html

    【讨论】:

    • 这只能回答一半的问题;而且不是很擅长。
    • @BoristheSpider 我不是 java 专家,只是想根据我所知道的给这个人一些帮助。谢谢你的侮辱。
    【解决方案3】:

    根据定义,我们知道我们有两个泛型类:

    酒吧:

    public class Bar<T, V> {...}
    

    和SomeFoo:

    public class SomeFoo<T, V> {...}
    

    Foo 代表一个不再是通用的类。也就是说,T 和 V 已被固定为 Type 和 Type2。所以如果你想制作一个 Foo,你可以使用 new Foo() 代替 new Foo。

    SomeFoo 是另一个具有泛型的对象,它也应该在 Foo 中固定为 Type 和 Type2。所以 SomeFoo 是公共方法 getReader(Type type) 的返回类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多