我是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<Type,type2>
?为什么我们使用这些箭头括号?
答案 0 :(得分:2)
SomeFoo&lt; Type,Type2&gt; 是一种类型。这个特定的一个是使用Java泛型,这里有一些关于它的更多信息:http://docs.oracle.com/javase/tutorial/java/generics/index.html。
另外 Bar&lt; Type,Type2&gt; 是一种类型,这里是类Foo的基类。箭头括号用于使类通用于备用重复项。认为它就像你有布尔值列表。该列表与列表整数值有何不同?这里只有条目的类型不同,所以编程语言允许我们从中抽象出来:
List<Boolean> booleans = ...;
List<Integer> integers = ...;
请参阅 java.util.List 类的Javadoc和/或Source以了解有关此内容的更多信息。
答案 1 :(得分:1)
public SomeFoo<Type, Type2> getReader(Type type)
是Bar
类的继承方法。我们知道它继承自Bar
,因为在类定义中使用了extends
。
Foo foobar = new Foo()
创建一个Foo
对象,foobar
是引用该对象的方法。
括号<>
代表Java中的通用名称。
了解泛型是什么以及它们如何运作的细节超出了本主题的范围。我和其他人一样,建议您在这里阅读http://docs.oracle.com/javase/tutorial/java/generics/why.html
答案 2 :(得分:1)
从定义中,我们知道我们有两个通用类:
栏:
public class Bar<T, V> {...}
和SomeFoo:
public class SomeFoo<T, V> {...}
Foo代表一个不再通用的类。换句话说,T和V已被固定为Type和Type2。因此,如果你想制作一个Foo,你可以使用新的Foo()而不是新的Foo。
SomeFoo是另一个具有泛型的对象,它也应该在Foo中固定为Type和Type2。所以SomeFoo是公共方法getReader(Type type)的返回类型。