Java中泛型类的值

时间:2015-12-30 19:15:14

标签: java generics

是否可以创建类,例如第二个参数是值? 构造函数看起来像这样:

FancyClass<Integer, 1> myFancyClass = new FancyClass<>();

2 个答案:

答案 0 :(得分:6)

没有。泛型用于类型而非文字值。

我不知道你要做什么,但如果你的代码背后有一些实际的想法,你可以用

轻松实现它。
public class FancyClass<T> {
    T myVal;
    public FancyClass(T val) {
        myVal = val;
    }
}

FancyClass<Integer> myFancyClass = new FancyClass<>(1);

答案 1 :(得分:1)

没有。无论如何,这样做没有逻辑。来自维基百科:

  

泛型是通用编程的工具,它在2004年在J2SE 5.0中添加到Java编程语言中。它们允许类型或方法对各种类型的对象进行操作,同时提供编译时类型安全性。

一个小例子:

班级Lunchbox代表一个午餐盒,里面的盒子分成两个不同的容器。午餐盒中的每个“容器”可以包含一堆物品,但这些物品只能是一种(相同)类型。

如果没有泛型,我们必须为容器的两侧预定义2种类型。但是让我们说我们想要这样做,这样每个午餐盒都可以有不同类型的物品。那是我们需要泛型的时候:

public class Lunchbox<V1, V2>

现在在LunchBox类中(并且只在LunchBox类中),您可以访问两种类型:V1V2。他们像普通班一样被处理。

V1 objectOfTypeV1 = ...; //I can even declare variables with that type.

现在我们可以创建多种午餐盒:

Lunchbox<String, Integer> lunchbox1 = new Lunchbox<>();//Contains strings and integers
Lunchbox<Foo, Bar> lunchbox2 = new Lunchbox<>();//Contains Foos and Bars
LunchBox<LunchBox<Foo, Bar>, Integer> lunchbox3 = new LunchBox<>(); //Contains lunchboxes (containing Foos and bars) and integers

对于你的问题:如果我们将一个值作为泛型类,那就没有任何意义了。让我们继续Lunchbox课程 - 当没有这样的东西时,我们的午餐盒怎么能拿着1型?你不能宣布......

1 object = new 1();

那不是一个班级。这是一个价值。我不明白为什么你想把一个值放在泛型中,它没有意义。希望我帮忙。

万一你不明白这里的任何内容,这里有一个链接到Oracle,他们有关于泛型的教训,为什么要使用它们:Click here.

Why use generics? -Oracle