我在想。我有class OccList<T>
。我很好用OccList保存任何对象,但如果T是一个字符串,或者如果T是一个整数,我想做更多。
在做这件事时我有什么办法可以使用相同的名字吗?到目前为止,我的解决方案是创建一个新类class StringOccList extends OccList<String>
。最好我希望能够使用OccList<String>
并让java根据使用的类型创建适当的类,就像方法签名一样。可能吗?有更好的解决方案吗?
答案 0 :(得分:0)
它必须是一个不同的类,除非您希望添加的功能成为基类的一部分。
想一想;假设您有一个方法printAll
,可以在列表的所有内容上调用System.out.println
。方法将去哪里?
String
,您只希望该方法可以调用。然后它不能成为基类的一部分(因为否则它将在基类中定义),所以你需要使用不同的类,如StringOccList
String
的情况下)它在所有成员上调用T.toString
,或者如果T不是合适的类型,您可以让该方法抛出异常。这就是“通用”的含义 - 该类适用于任何类型的内部类型。如果它不适用于任何类型的内部类型,那么它就不再是通用了!
答案 1 :(得分:-1)
是的,您可以使用Java推断类型的一个地方,即方法返回。想象一下,你需要OccList
String
,但你不想这样做
OccList<String> list = new OccList<String>();
那么,你只需要写一个方法来做到这一点。像这样:
public static <E> OccList<E> newOccList(){
return new OccList();
}
并像这样调用它:
OccList<String> stringList = newOccList();
OccList<Integer> integerList = newOccList();
OccList<File> fileList = newOccList();
它适用于您需要的任何通用类型。
这在Google Guava库中使用,请参阅here