首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java泛型方法声明基础

Java泛型方法声明基础
EN

Stack Overflow用户
提问于 2016-09-14 10:13:16
回答 3查看 932关注 0票数 3

我开始学习Genericsfor Java,并阅读了一些教程,但我有点困惑,也不确定如何声明泛型方法。

当我使用泛型类型时,定义方法的正确顺序是什么?我发现了这个例子,我什么时候需要使用尖括号,什么时候不用?

代码语言:javascript
复制
public class Box<A> {

    private A a;
    ...

    public void setA(A a) {
        this.a = a;
    }

    public <A> List<A> transform(List<A> in) {
        return null;
    }

    public static <A> A getFirstElement(List<A> list) {
        return null;
    }

    public A getA() {
        return a;
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-14 10:20:15

问题是您的代码使用的是相同的字符A,但是在不同的地方有几种不同的“含义”:

代码语言:javascript
复制
public class Box<T> { 

需要大括号,因为您在这里说: Box使用一种通用类型,称为T。

用法T go的不带大括号:

代码语言:javascript
复制
private T a;
public void setA(T a) {

但是后来

代码语言:javascript
复制
public <T2> List<T2> transform(List<T2> in) {

正在引入,另一个类型参数。我把它命名为T2,是为了明确它是而不是T,意思是T2的作用域是,只有,这是一个方法transform。其他方法不知道T2!

代码语言:javascript
复制
public static <A> A getFirstElement(List<A> list) {

与上述相同-将是"T3“在这里;-)

编辑您的注释:您不能让静态方法使用类范围的类型T,这是完全不可能的!请参阅这里的原因!

编辑2:泛型允许您编写代码,即泛型(因为它可以处理不同的类);但仍然为您提供了安全性。示例:

代码语言:javascript
复制
 Box<String> stringBox = new Box<>();
 Box<Integer> integerBox = new Box<>();
 integerBox.add("string"); // gives a COMPILER error!

在人们拥有泛型之前,他们只能处理整个地方的对象;以及手动转换。

票数 5
EN

Stack Overflow用户

发布于 2016-09-14 10:23:48

您的示例展示了两个不同的概念:泛型类和泛型方法。

这是一个引入类型参数<A>的泛型类。

代码语言:javascript
复制
public class Box<A> {

}

虽然这些是通用方法,但是引入了它们自己的类型参数<A>

代码语言:javascript
复制
public <A> List<A> transform(List<A> in) {
    return null;
}

public static <A> A getFirstElement(List<A> list) {
    return null;
}

将其与具有特定名称的字段的类和具有该名称的参数的方法进行比较:

代码语言:javascript
复制
public class Box {
    private String name;

    publix Box(String name) {
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-09-14 10:22:03

如果您的方法中有需要返回类型的需求,则此时类型取决于您的方法参数,则可以在方法签名之前写入角括号,如示例中所示,简单地说,word建议泛型用于用于多种类型对象的相同类或实用程序的特性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39487877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档