【问题标题】:Java undefined generic typeJava 未定义的泛型类型
【发布时间】:2012-11-08 21:39:15
【问题描述】:

我有一个泛型类,它扩展了另一个泛型类。

抽象类有 2 个类型参数,但我的函数中只需要一个。

只为它分配一个随机的字符串类型是否节省,或者这样做有什么缺点?

public abstract class AbstractFoo<T, B>
{
   public abstract void read(T item);
}

public class LittleFoo extends AbstractFoo<byte[], String>
{
   @Override
   public void read(byte[] item)
   {
      // work here
   }
}

【问题讨论】:

  • 如果你只想要一个泛型参数,那你为什么一开始就声明了 2?
  • 因为我有多个类从这个设计继承。只有少数特殊类只需要1个参数。

标签: java generics types


【解决方案1】:

或者您可以使用java.lang.Void 代替String

【讨论】:

    【解决方案2】:

    不,这确实没有任何缺点,在我看来,这似乎是一种简单的方法。

    另外,您可能需要考虑使用 composition 而不是 extension。比如看看HashSet implementation来自java.util

    87   public class HashSet<E>
    88       extends AbstractSet<E>
    89       implements Set<E>, Cloneable, java.io.Serializable
    90   {
    91       static final long serialVersionUID = -5024744406713321676L;
    92   
    93       private transient HashMap<E,Object> map;
    94   
    95       // Dummy value to associate with an Object in the backing Map
    96       private static final Object PRESENT = new Object();
    

    HashSet 基本上是HashMap,但只考虑键集(因此虚拟变量PRESENT,它只是一个占位符)。你也许可以做类似的事情。

    【讨论】:

    • 非常有用的答案,谢谢。实际上我两者都用,我的班级有 AbstractFoo 的其他孩子作为字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    相关资源
    最近更新 更多