java - 如何删除 java 中未经检查的强制转换警告?

标签 java casting warnings unchecked

我有这段代码:

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/

相关文章:

sql - Postgres 在连接时无法识别 CAST 的问题

c++ - 导致 .exe 错误的警告?

objective-c - 如果包含 @try @catch block ,则不带 return 语句的 Obj-C 方法可以编译

java - 我无法在 Spring boot 应用程序中使用mockito 来模拟 Dao 方法

c - 为什么 linux 内核使用双重逻辑否定而不是强制转换为 bool 值?

java - Axis2 和 Web 服务

c++:将地址存储为字符串

scala - scala中的 "not a simple type"警告是什么意思?

java - 调用 setStatusBarColor ANDROID

java - 如何将多个不同的请求主体映射到同一个 POJO