我有这段代码:
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
public class ClientLookup<T extends Remote> {
private T sharedObject;
public void lookup(String adress) throws MalformedURLException, RemoteException, NotBoundException {
sharedObject = (T) Naming.lookup(adress);
}
public T getSharedObject() {
return sharedObject;
}
}
带有“(T) Naming.lookup(adress)”的部分给我一个警告:“类型安全:从 Remote 到 T 的未经检查的转换”
我不想使用“@SuppressWarnings("unchecked")”,我只是想知道为什么在“T extends Remote "并修复它(以获得干净的代码)
谢谢。
最佳答案
这里的“unchecked cast”意味着 Java 无法验证要转换的对象是否实际上是 T
类型。在运行时,由于类型 T
在运行时是未知的。它最多可以验证它实际上是 Remote
类型.
此问题的常见解决方法是提供 Class<T>
对象定义类型:
public class ClientLookup<T extends Remote> {
private T sharedObject;
private Class<T> clazz;
public ClientLookup(Class<T> clazz) {
this.clazz = clazz;
}
public void lookup(String adress) throws MalformedURLException, RemoteException, NotBoundException {
sharedObject = clazz.cast(Naming.lookup(adress));
}
public T getSharedObject() {
return sharedObject;
}
}
这样你就可以创建类型 T
在运行时显式和已知。
关于java - 如何删除 java 中未经检查的强制转换警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2076915/