3 回答
TA贡献2011条经验 获得超2个赞
我们需要查看更多信息以告知是否可以完全删除此代码(看起来您想使用 DI 框架),但您可以使 get 方法泛型以使其返回与其参数相同的类型:
static <T extends Bar> T get(Class<T> clazz);
这将摆脱调用端的类型转换。
TA贡献1779条经验 获得超6个赞
你应该可以这样写:
public interface Bars {
Foo1 FOO1 = get(Foo1.class);
Foo2 FOO2 = get(Foo2.class);
Foo3 FOO3 = get(Foo3.class);
Foo4 FOO4 = get(Foo4.class);
static <T extends Bar> T get(Class<T> clazz) {
return clazz.cast(FooBar.GET.getBars().get(clazz));
}
}
根据方法cast(...)声明的结果类型,可能不需要调用get(Class)。
在那之后,我认为没有更好的方法来初始化具有不同类型的 4 个不同的变量。
如果这些是局部变量,并且您使用的是 Java 10 或更高版本,则可以使用新var语法,这样就无需在声明中提及类型。(类型将从初始化表达式中推断出来。)
但是,这不适用于这种情况,因为您的示例将这些变量显示为接口的字段。该var语法只能用于局部变量的声明。
TA贡献1788条经验 获得超4个赞
将方法更改get为:
static <T extends Bar> T get(Class<T> clazz) {
return clazz.cast(FooBar.GET.getBars().get(clazz));
}
您现在可以在不重复类型的情况下调用它:
var foo1 = get(Foo1.class);
var foo2 = get(Foo2.class);
该var语法仅适用于 Java 10+。在 Java 10 之前,您需要:
Foo1 foo1 = get(Foo1.class);
Foo2 foo2 = get(Foo2.class);
请注意,我已将上面的字母更改为小写以符合 Java 命名约定。
添加回答
举报