FindBugs报告未经检查/未经确认的演员表,即使没有演员表

时间:2016-06-24 06:37:30

标签: java generics casting findbugs

考虑以下代码

class AbstractPacket {
}

class ConcretePacket extends AbstractPacket {
}

abstract class AbstractPacketReader<P extends AbstractPacket> {
    P read() {
        return doRead();
    }

    protected abstract P doRead();
}

class ConcretePacketReader extends AbstractPacketReader<ConcretePacket> {
    @Override
    protected ConcretePacket doRead() {
        return new ConcretePacket();
    }
}

public class Example {
    public static void main(String[] args) {
        ConcretePacketReader reader = new ConcretePacketReader();
        ConcretePacket packet = reader.read(); // Unchecked/unconfirmed cast here
        System.out.println(packet);
    }
}

为什么FindBugs会抱怨未经检查的演员?当然,ConcretePacketReader扩展AbstractPacketReader<ConcretePacket>后,其read函数应返回ConcretePacket,并且不需要强制转换。当然,由于类型擦除,实际上有一个强制转换,但这是编译器检查安全性的一种强制类型,因此FindBugs不应该关心它。

它是FindBugs中的一个错误还是我错过了一些荒谬简单但又不完全明显的东西?

0 个答案:

没有答案