gpt4 book ai didi

java - 为什么我不能声明一个参数化的静态类变量?

转载 作者:行者123 更新时间:2023-12-03 23:07:01 25 4
gpt4 key购买 nike

尝试创建具有通用类型的静态字段不会编译:

class MyClass {

public static Function<Z, Z> blargh = new Function<Z, Z>() {
public Z apply(Z a) {
return a;
}
};
}

eclipse 说:

Multiple markers at this line
- Z cannot be resolved to a type
- Z cannot be resolved to a type
- Z cannot be resolved to a type
- Z cannot be resolved to a type
- The type new Function<Z,Z>(){} must implement the inherited
abstract method Function<Z,Z>.apply(Z)

但用具体类型替换所有 Z 就可以了:

static Function<Integer, Integer> blargh = new Function<Integer, Integer>() {
public Integer apply(Integer a) {
return a;
}
};

这是怎么回事?


上下文:

  1. 我本来想弄清楚为什么 this code使用方法而不是字段:

    public static <T extends Throwable> F<T, String> eMessage() {
    return new F<T, String>() {
    public String f(final Throwable t) {
    return t.getMessage();
    }
    };
    }

    也许是为了克服这个限制?

  2. Function 类型来自 Google 的 guava 库。

最佳答案

编辑:现在我更清楚地看到了问题。

我认为首先你必须将类型声明为类参数:

class MyClass<Z> {

以获得可见性,但现在你不能那样使用它的原因是因为静态成员应该在类的所有实例之间共享。但是由于您可以创建具有不同类型参数的实例,因此依赖于特定类型的静态成员没有意义。

关于java - 为什么我不能声明一个参数化的静态类变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com