gpt4 book ai didi

java - 强制子类使用类型参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:23:57 28 4
gpt4 key购买 nike

当我创建一个带有类型参数的类时:

public abstract class AbstractBox<T> {
abstract T getContent();
}

然后我仍然可以创建一个没有类型参数的子类:

class SomeBox extends AbstractBox {             // DISALLOW THIS
@Override
Something getContent() {
return null;
}
}

我能否以某种方式强制子类提供类型参数(即使它只是Object)?例如,我想禁止上述但允许:

class SomeBox extends AbstractBox<Something> {  // ALLOW THIS
@Override
Something getContent() {
return null;
}
}

编辑:这不是 Can overridden methods differ in return type? 的副本.该问题询问重写方法是否可以返回类型参数的子类型。

我的问题是我是否可以强制具有类型参数的抽象子类必须提供类型参数。

最佳答案

如果你想检查 AbstractBox在扩展时提供了一个类型参数,你可以这样做:

abstract class AbstractBox<T> {
protected AbstractBox() {
// First, find the direct subclass of AbstractBox
Class<?> cls = getClass();
while(cls.getSuperclass() != AbstractBox.class)
cls = cls.getSuperclass();

// Then, check if it's superclass is parametrized
if (!(cls.getGenericSuperclass() instanceof ParameterizedType)) {
throw new RuntimeException("Must parametrize the extension of AbstractBox.");
}
}

abstract T getContent();
}

需要首先获取直接子类,这样它就不会在直接子类扩展 AbstractBox 的情况下中断。带有一个参数,然后再次被子类化。

请注意,这也将接受 SomBox extends AbstractBox<String> 的情况。 .

关于java - 强制子类使用类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49688069/

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