Java:如何在SomeClass <T>中为"T"设置默认值?

Ton*_*ony 27 java generics

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

假设我有一Monkey堂课.猴子可以住在不同的EnvironmentS,如JungleZoo:

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

        public T getHome()
        {
            return home;
        }  
    }

有没有办法为其指定默认值T,所以我可以使用该类型Monkey而不是Monkey<?>获取编译器警告?

编辑

换句话说,有没有办法摆脱"原始类型"警告而不必明确压制它?

Isa*_*ett 27

不,你做不到.通用参数没有默认值.您可以重新组织类型层次结构,以便有一个GenericMonkey和一个Defaultconkey,它将泛型参数设置为您想要的默认值.


Fir*_*DoL 5

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

通用类型参数不能具有默认参数.

制作这样的东西怎么样:

public class Monkey extends Monkey<YourType>
Run Code Online (Sandbox Code Playgroud)

很可能你会"浪费"继承的能力.

编辑1: 另一个有趣的事情是反过来我的建议,

public class Monkey<T> extends Monkey
Run Code Online (Sandbox Code Playgroud)

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