-1

我想知道。我有一个class OccList<T>. 我对 OccList 持有任何对象都很好,但是如果 T 是一个字符串,或者如果 T 是一个整数,我想做更多的事情。

有什么办法可以在做的时候使用相同的名字吗?到目前为止,我的解决方案是创建一个新类class StringOccList extends OccList<String>。理想情况下,我希望能够使用OccList<String>并让 java 根据使用的类型创建适当的类,就像方法签名一样。可能吗?有更好的解决方案吗?

4

2 回答 2

0

它必须是不同的类,除非您希望添加的功能成为基类的一部分。

想想看;假设您有一个printAll调用System.out.println列表所有内容的方法。方法将走向何方?

  1. 您只希望该方法是可调用的,如果它是String. 那么它不能是基类的一部分(因为否则它会在基类中定义),所以你需要使用不同的类,比如StringOccList
  2. 如果该方法在基类中是可调用的,那也没关系。您可以编写它以便(在 的情况下String)它调用T.toString所有成员,或者如果 T 不是适当的类型,您可以让该方法抛出异常。

这就是“泛型”的含义——该类适用于任何类型的内部类型。如果它不适用于任何类型的内部类型,那么它就不再是通用的了!

于 2013-04-08T11:56:58.913 回答
-1

是的,您可以利用 Java 推断类型的一个地方,即方法返回。想象一下你想要一个OccListof 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();

它适用于您需要的任何通用类型。

这是在谷歌番石榴库中使用的,请参考这里

于 2013-04-08T11:55:57.447 回答