这似乎是有效的Java语法:

<T> T get();

但是这是什么意思?有用吗?

下载澄清

我了解在方法参数中使用T时的含义,如下所示:
T get(Class<T> clazz);

返回类型可以从传入的类中推断出来。

但是,当您没有参数来说明T是什么类型时,它是什么类型?

最佳答案



这意味着该语言具有一组旨在尽可能简单的规则,并且在这里它们以不太有用的方式组合在一起。

通用方法具有类型参数。可以在方法主体的参数列表中的返回类型中使用类型参数。可以将它们组合使用,包括根本不使用。

例如,这些签名都可以是有用的:

<T> T foo( T t )  // The return type can be the type parameter
<T> List<T> ( )   // A type parameter does not have to be an argument
<T> T get()的情况使用相同的规则,但组合不同。



不是特别。您尚未显示实现。 @LouisWasserman在有深刻见解的注释中指出,实现要么必须抛出,返回null要么被黑。

这是一个示例黑客。我认为这没有用,因为有一种更简单的方法可以完成此操作。如果您要从C转换为Java,并希望代码尽可能保持并行,那可能会很有用。
public static class Union {
    public Object o;
    public Union( Object value ) { o = value; }
    public Class<? extends Object> getType() { return o.getClass(); }
    public <T> T value() {
        return (T) o;   // <-- uses type parameter to cast
    }
}

public static void main(String[] args) {
    Union union = new Union( "foo" );

    Class<?> valueType = union.getType();
    if ( valueType.equals( String.class )) {
        String s = union.value();     // <-- the call
        System.out.println( s );
    }
}

关于java - "<T> T get()"是什么意思? (有用吗?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36363078/

10-11 17:31