Nic*_*ole 7 java generics compiler-warnings
我有一个List
包含某个超类(如Vehicle),我想写一个方法,返回该列表中的对象,这些对象是某个子类(如Car)的实例.
到目前为止我有这个,但它生成一个典型的"未检查"操作编译器警告:
public <T extends Vehicle> List<T> getVehiclesOfType(Class<T> type) {
List<T> result = new ArrayList<T>();
for (Vehicle vehicle : getVehicles()) {
if (type.isAssignableFrom(vehicle.getClass())) {
result.add(type.cast(vehicle)); // Compiler warning here
// Note, (T)vehicle generates an "Unchecked cast" warning (IDE can see this one)
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
Warning: Note: Test.java uses unchecked or unsafe operations.
Run Code Online (Sandbox Code Playgroud)
我没有任何其他方法来完成这个(我找不到任何东西Collections
,但有可能一些JDK方法可以做到),但理想情况下它会提供以下接口:
List<Car> cars = getVehiclesOfType(Car.class);
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我在原始代码上收到编译器警告.
你得到一个警告,因为编译器(或IDE)无法知道强制转换是安全的,而不了解其含义isAssignableFrom()
.但isAssignableFrom()
它不是语言功能,它只是一种库方法.就编译器而言,它就像你说的一样
if (type.getName().contains("Elvis")) {
result.add(type.cast(vehicle));
}
Run Code Online (Sandbox Code Playgroud)
但是,你知道什么isAssignableFrom()
意思,所以你知道它是安全的.这正是这种情况@SuppressWarnings
的意思.
归档时间: |
|
查看次数: |
2520 次 |
最近记录: |