Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java T扩展类的意义是什么?_Java_Generics - Fatal编程技术网

Java T扩展类的意义是什么?

Java T扩展类的意义是什么?,java,generics,Java,Generics,这样的方法声明有什么区别: public <T extends SomeClass> void doSomething(T obj) { // Do something. } 在我看来,它们都指定传入的对象必须是SomeClass类型的子类,那么为什么还要在这个实例中使用泛型呢?在您的例子中,这没有多大区别 但请考虑以下内容: public <T extends SomeClass> void doSomething(List<T> obj) pu

这样的方法声明有什么区别:

public <T extends SomeClass> void doSomething(T obj)
{
    // Do something.
}

在我看来,它们都指定传入的对象必须是
SomeClass
类型的子类,那么为什么还要在这个实例中使用泛型呢?

在您的例子中,这没有多大区别

但请考虑以下内容:

public <T extends SomeClass> void doSomething(List<T> obj)
public void doSomething(列表obj)
在这种情况下,可以通过以下方式调用该方法:

obj.doSomething(new ArrayList<SubclassOfSomeClass>());
obj.doSomething(new ArrayList<SomeClass>());
obj.doSomething(新的ArrayList());
对象doSomething(新ArrayList());
如果你愿意

public void doSomething(List<SomeClass> obj)
public void doSomething(列表obj)
您只能执行以下操作:

obj.doSomething(new ArrayList<SomeClass>());
obj.doSomething(新的ArrayList());

在您的情况下,这没有多大区别

但请考虑以下内容:

public <T extends SomeClass> void doSomething(List<T> obj)
public void doSomething(列表obj)
在这种情况下,可以通过以下方式调用该方法:

obj.doSomething(new ArrayList<SubclassOfSomeClass>());
obj.doSomething(new ArrayList<SomeClass>());
obj.doSomething(新的ArrayList());
对象doSomething(新ArrayList());
如果你愿意

public void doSomething(List<SomeClass> obj)
public void doSomething(列表obj)
您只能执行以下操作:

obj.doSomething(new ArrayList<SomeClass>());
obj.doSomething(新的ArrayList());

我经常想知道这一点,但由于害怕可怕的{-1},我没有足够的勇气去问。所以+1.说“java泛型是完全无用的”是一个大胆而不正确的说法。我不否认它们有缺陷,功能齐全,但这并不意味着它们毫无用处。上帝啊,再次抱歉,我似乎无法阅读,所以我要回家了。在上述情况下,没有任何意义,但在其他具体情况下,这可能是有用的,正如下面micha的回答。实现是为开发人员而不是为计算机,在这些情况下,它恰好对人有用!一个你必须使用这个的例子;在上面的示例中,我看不出有什么区别,但是如果返回类型是t类型,则会有区别。在这种情况下,客户端代码就不必强制转换了。我经常想知道这一点,但由于害怕可怕的{1}而没有足够的勇气去问。所以+1.说“java泛型是完全无用的”是一个大胆而不正确的说法。我不否认它们有缺陷,功能齐全,但这并不意味着它们毫无用处。上帝啊,再次抱歉,我似乎无法阅读,所以我要回家了。在上述情况下,没有任何意义,但在其他具体情况下,这可能是有用的,正如下面micha的回答。实现是为开发人员而不是为计算机,在这些情况下,它恰好对人有用!一个你必须使用这个的例子;在上面的示例中,我看不出有什么区别,但是如果返回类型是t类型,则会有区别。在这种情况下,客户端代码不必强制转换。但是
public void doSomething(List@PaulBellora除非有第二个参数
public void doSomething(List obj,T bar)
@ratchetfreak Right,否则这将是一个更好的例子。但是
public void doSomething(List@PaulBellora除非有第二个参数
public void doSomething(List obj,T bar)
@ratchetfreak Right,否则这将是一个更好的例子。