当前位置: 首页 > 面试题库 >

没有参数的通用方法

章远航
2023-03-14
问题内容

我对包含不带参数的泛型方法的代码感到困惑,所以这种方法的返回泛型类型是什么,例如:

static <T> example<T> getObj() {
    return new example<T>() {

        public T getObject() {
            return null;
        }

    };
}

这是通过以下方式调用的:

example<String> exm = getObj(); // it accepts anything String like in this case or Object and everything

接口example's定义为:

public interface example<T> {

    T getObject();
}

我的问题:example<String> exm是否接受字符串,对象和所有内容。那么什么时候将通用返回类型指定为String呢?


问题答案:

编译器TLHS 分配中使用的具体类型推断出类型。

从此链接:

如果类型参数未出现在方法参数的类型中,则编译器无法通过检查实际方法参数的类型来推断类型参数。如果类型参数出现在方法的返回类型中,则编译器将查看使用返回值的上下文。如果方法调用显示为分配的右侧操作数,则编译器将尝试从分配的左侧操作数的静态类型推断方法的类型参数。

链接中的示例代码与您所询问的代码相似:

public final class Utilities { 
  ... 
  public static <T> HashSet<T> create(int size) {  
    return new HashSet<T>(size);  
  } 
} 
public final class Test 
  public static void main(String[] args) { 
    HashSet<Integer> hi = Utilities.create(10); // T is inferred from LHS to be `Integer`
  } 
}


 类似资料:
  • 我试图使用Google的协议缓冲区描述RPC服务 当我试图编译这个定义时,我得到一个错误,指向片段。 如果我用替换,它可以正常工作,但在这种情况下,该方法不需要任何参数。有办法做到这一点吗?还是根本不支持?

  • 我对Scala和Spark RDD编程相当陌生。我使用的数据集是一个CSV文件,其中包含电影列表(每部电影一行)及其关联的用户评分(以逗号分隔的评分列表)。CSV中的每一列都代表一个不同的用户,以及他/她对电影的评价。因此,用户1对每部电影的评分在左侧第二列中表示: 示例输入: 蜘蛛侠,1,2,3,3 睡眠博士,4,4,,1 我得到以下错误: 当我执行下面的几行时。对于下面的程序,第二行代码拆分由

  • 问题内容: 要在中使用泛型类型,我们需要使用(无法获得泛型,其中T是泛型类“ ) 假设我有课 还有一些包装类 因此,如果我尝试执行此类操作,则一切正常。 但是当我尝试创建上述方法的通用变体时… …并像这样调用此方法… …而不是得到对象,我得到了对象。 我怎么解决这个问题?它是RestTemplate错误吗? 我了解这个概念。不幸的是我是在这里新注册的,所以我无法评论他的答案,所以在这里写下。林不知

  • 问题内容: 我需要帮助使此类型适用于任何类型。 我有一个函数,我需要接受具有属性的其他类型。 我尝试使用接口,但不适用于我的财产情况。这是代码: 我明白了 错误prog.go:39:在Count的参数中无法将人类([人类]类型)用作[]哺乳动物 有关更多详细信息,请参见Go Playground,网址为http://play.golang.org/p/xzWgjkzcmH 问题答案: 使用接口而不

  • 我试图理解当我遇到诸如“groovy.lang.MissingMethodException:无方法签名:Three.method()适用于参数类型”之类的错误时会发生什么:

  • null 我可以推断,在Java中,这种类型的方法可以应用于带有一个参数的函数接口。 还有,有没有一个参数函数接口的例子,函数有一个参数,不像上面的例子?