【问题标题】:Creating default generic type for a class in Java在 Java 中为类创建默认泛型类型
【发布时间】:2012-01-12 20:50:36
【问题描述】:

我想创建一个具有两种泛型类型的对象,但在某些地方创建它时只给出了一种泛型类型。在这些情况下,第二种类型并不重要,所以我希望能够提供一个选项,用于创建只有一种泛型类型的类,而另一种泛型类型默认设置为 Object,看起来像( C++ 风格):

public class myClass<T,O=Object> {...
}

由于我知道 Java 中没有默认值,我不希望有默认类型,但是有什么方法可以创建一些类似的东西(可能是类覆盖)?

【问题讨论】:

标签: java class generics


【解决方案1】:

创建子类似乎是一种开销,我会使用static factory method

public class MyClass<T, O> {
    ...

    <T> public static MyClass<T, Object> create(...)
    ...
}

【讨论】:

  • 您可以在此处使用通配符。例如,? extends Object 而不是 Object。稍后,您可以将代码(如果有保证)更改为 ? extends String,而不会破坏现有客户端。
【解决方案2】:

实现这一点的典型方法是继承“myClass”。

也就是说,假设你有

public class MyClass<T, O> {}

你创建一个子类

public class DefaultMyClass<T> extends MyClass<T, Object> {}

这可能不像你想要的那样优雅,但它确实是实现这一目标的唯一方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2016-11-14
    • 2016-06-20
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多