作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直想知道 getThis()
技巧,以及从自界类型到其类型参数的不安全转换的替代方案。
public abstract class SelfBound<T extends SelfBound<T>> {
protected abstract T getThis();
public void doSomething(T instance) { ... }
public final void doSomethingWithThis() { doSomething(getThis()); }
public final void doSomethingWithThisUnsafe() { doSomething((T) this); }
}
是否可以对SelfBound
进行子类化,以便doSomethingWithThisUnsafe()
抛出ClassCastException
? (是否可以在不子类化 SelfBound
的情况下做到这一点?)
最佳答案
当然,子类化时可能会出现ClassCastException
。这是一个简单的例子:
public abstract class SelfBound<T extends SelfBound<T>> {
protected abstract T getThis();
public void doSomething(T instance) { }
public final void doSomethingWithThis() { doSomething(getThis()); }
public final void doSomethingWithThisUnsafe() { doSomething((T) this); }
public static class A extends SelfBound<A> {
@Override
protected A getThis() {
return this;
}
}
public static class B extends SelfBound<A> {
@Override
public void doSomething(A instance) {
super.doSomething(instance);
}
@Override
protected A getThis() {
return null;
}
}
public static void main(String[] args) {
new B().doSomethingWithThisUnsafe();
}
}
输出:
Exception in thread "main" java.lang.ClassCastException: SelfBound$B cannot be cast to SelfBound$A
at SelfBound$B.doSomething(SelfBound.java:1)
at SelfBound.doSomethingWithThisUnsafe(SelfBound.java:6)
at SelfBound.main(SelfBound.java:28)
不太清楚“没有子类化SelfBound
”是什么意思。由于 SelfBound
是一个抽象类,如果不继承它就无法调用它的方法,因此在调用它的方法时不会出现任何异常。
关于java - getThis() 技巧和 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31758011/
我一直想知道 getThis() 技巧,以及从自界类型到其类型参数的不安全转换的替代方案。 public abstract class SelfBound> { protected abstr
我正在阅读有关 Java 泛型的文章,我偶然发现了这个主题,我对此感到有些困惑。 发件人:http://www.angelikalanger.com/GenericsFAQ/FAQSections/P
我的问题是关于 Method chaining + inheritance don’t play well together? 的.但不幸的是,方法链接的所有示例/答案都使用单级继承。我的用例涉及多级
我是一名优秀的程序员,十分优秀!