繁体   English   中英

在 Java 语法中,类<? extends Something>

[英]in Java syntax, Class<? extends Something>

Class<? extends Something>

这是我的解释,它是类模板,但是类 ? 意味着类的名称未确定,它扩展了Something类。

如果我的解释有问题,请告诉我。

这里有一些令人困惑的答案,所以我会尝试澄清这一点。 您可以这样定义泛型:

public class Foo<T> {
    private T t;
    public void setValue(T t) {
        this.t = t;
    }
    public T getValue() {
        return t;
    }
}

如果您希望 Foo 上的泛型始终扩展类 Bar 您可以将其声明为:

public class Foo<T extends Bar> {
    private T t;
    public void setValue(T t) {
        this.t = t;
    }
    public T getValue() {
        return t;
    }
}

? 在声明变量时使用。

Foo<? extends Bar>foo = getFoo();

或者

DoSomething(List<? extends Bar> listOfBarObjects) {
    //internals
}

你几乎是对的。 基本上,Java 没有模板的概念(C++ 有)。 这称为泛型。 这定义了一个泛型类Class<> ,泛型的属性是Something任何子类。

如果您想了解模板和泛型之间的区别,我建议您阅读“ C++ 和 Java 中的“泛型”类型之间有什么区别? ”。

你是对的

定义是该类必须是Something的子类型

它与Class<T>相同,但有一个条件,即T必须像 Anthony Accioly 建议的那样extends Somethingimplements Something

它也可以是类Something本身

你是对的。

在 Java 泛型中, ? 运算符的意思是“任何类”。 extends关键字可用于将其限定为“任何扩展/实现Something (或Something )的类。

因此,你有“ Class的一些类,但这个类必须是或扩展/实现Something ”。

你是对的。

然而,通常你会想要命名扩展Something的类并编写例如<E extends Something> 如果你使用? 你以后不能对给定的类型做任何事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM