I';我在学习头先Java,但我能';我不明白544页

I';我在学习头先Java,但我能';我不明白544页,java,generics,Java,Generics,“当您为类声明一个类型参数时,您只需在任何使用实际类或接口类型的地方使用该类型。方法参数中声明的类型基本上被替换为实例化该类时使用的类型。” 如果类本身不使用类型参数,您仍然可以为方法指定一个类型参数,方法是在返回类型之前的一个非常不寻常(但可用)的空间中声明它,该方法表示t可以是“任何类型的动物” 您能解释一下吗?它的意思是,在泛型类中,您可以编写如下方法: public T doSomething () { } 请注意,返回类型为“T” 在编译时,该方法的返回类型将是实例化泛型类时传递给泛

“当您为类声明一个类型参数时,您只需在任何使用实际类或接口类型的地方使用该类型。方法参数中声明的类型基本上被替换为实例化该类时使用的类型。”

如果类本身不使用类型参数,您仍然可以为方法指定一个类型参数,方法是在返回类型之前的一个非常不寻常(但可用)的空间中声明它,该方法表示t可以是“任何类型的动物”


您能解释一下吗?

它的意思是,在泛型类中,您可以编写如下方法:

public T doSomething () {
}
请注意,返回类型为“T”

在编译时,该方法的返回类型将是实例化泛型类时传递给泛型类的任何类型。

class{
class Zoo<T> {
   static void putAnimal(T animal) {
       // do stuff
   }
}

Zoo<Ape> apeZoo = new Zoo<Ape>(); // you can now put apes (and chimps) here
Zoo<Reptile> monkeyZoo = new Zoo<Reptile>(); // this zoo takes reptiles

apeZoo.putAnimal(new Chimp());
monkeyZoo.putAnimal(new Tortoise());
静态动物(T动物){ //做事 } } Zoo apeZoo=新动物园();//你现在可以把猿(和黑猩猩)放在这里 动物园monkeyZoo=新动物园();//这个动物园饲养爬行动物 apeZoo.putAnimal(新黑猩猩()); monkeyZoo.putAnimal(新乌龟());
在第一段中,泛型就是这样为类工作的。例如,对于列表,您可以创建泛型类型的列表,例如integer,例如:

ArrayList<Integer> list = new ArrayList<Integer>();
例如,这将允许您创建一个静态实用程序方法,该方法返回类型为T的内容。要返回T列表的第一个元素:

public static <T> T getFirst (List<T> list) {
    return list.get(0);
}
publicstatict getFirst(列表){
返回列表。获取(0);
}
您可以以强类型方式使用此方法。欢迎提供更好的示例建议。:-)

编辑:我刚刚意识到我曾经写过一些使用这个功能的东西。我使用的是JPAAPI,每当您必须从查询中返回某个内容(列表或单个项)时,我都会感到非常恼火,并且会遇到未检查的类型警告,因为这里无法推断类型。如果您像我一样试图避免代码中出现警告,那么每次都必须抑制警告。因此,我编写了此方法来抑制对我的警告:

@SuppressWarnings("unchecked")
public static <T> List<T> returnResultList(Query query) {
    return (List<T>)query.getResultList();
}
@SuppressWarnings(“未选中”)
公共静态列表returnResultList(查询){
return(List)query.getResultList();
}
通过类型推断的魔力,它可以:

List<Integer> list = returnResultList(query);
List List=returnResultList(查询);

嗯。。。我清楚地记得543页和545页,但由于某些原因,544页是模糊的。我猜这是关于Java泛型的,但你可能想澄清一下你的问题。@Delium Tremens:再一次,你似乎在阅读这些头一本书时遇到了荒谬的困难。如果你一直要求我们澄清这本书,那么你需要一本不同的书。好的书名会有帮助的+1用于学习OP的第二段。这些都是很好的例子;java.util.Collections还有其他。谢谢。我认为,它们很好地说明了它的工作原理,但它们并不完全是真实世界。:-)
@SuppressWarnings("unchecked")
public static <T> List<T> returnResultList(Query query) {
    return (List<T>)query.getResultList();
}
List<Integer> list = returnResultList(query);