Java:如何在SomeClass<T>中设置“T”的默认值?

2022-09-01 03:52:16

有没有办法为泛型模板指定默认类型?

假设我有一个班级。猴子可以生活在不同的s中,例如或:MonkeyEnvironmentJungleZoo

    public class Monkey<T extends Environment>
    {
        T home;
        ...

        public T getHome()
        {
            return home;
        }  
    }

有没有办法指定 的默认值,以便我可以使用该类型而不是不收到编译器警告?TMonkeyMonkey<?>

编辑

换句话说,有没有办法摆脱“原始类型”警告而不必明确禁止它?


答案 1

不,你不能那样做。通用参数没有默认值。您可以重新组织类型层次结构,以便有一个 GenericMonkey 和一个 DefaultMonkey 将泛型参数设置为所需的默认值。


答案 2

不,你不能:http://en.wikipedia.org/wiki/Comparison_of_Java_and_C%2B%2B

泛型类型参数不能具有默认参数。

做这样的东西怎么样:

public class Monkey extends Monkey<YourType>

显然,你会“浪费”继承能力。

编辑1:另一件有趣的事情是做相反的建议,

public class Monkey<T> extends Monkey

在这种情况下,所有泛型类Monkey继承Monkey,在某些情况下,这是一件非常有趣的事情(特别是当你注意到一些实例方法适合所有类而不需要泛型时)。这种方法在Castle ActiveRecord中使用(我看到它在C#中使用,而不是在Java中使用),我发现它很漂亮。


推荐