当前位置: 首页 > 面试题库 >

Java中的JSON和泛型-类型安全警告

淳于新
2023-03-14
问题内容

我有一些数据存储在Java元素中,我需要以给定的格式JSONObject返回它。虽然我的实现工作正常,但是我仍然从eclipse收到警告消息(版本:Juno
Service Release 2):

类型安全性:put(Object,Object)方法属于原始类型HashMap。对通用类型HashMap的引用应参数化

这是我的代码:

public interface Element {...}

public abstract class AbstractElement implements Element {...}

public final class Way extends AbstractElement {...}

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

public class WayToJsonConverter{
    ...
    public JSONObject wayToJson(){
        JSONObject obj = new JSONObject();
        obj.put("id",way.getId());
        ...
        return obj;
    }
    ...
}

有问题的行是: obj.put("id",way.getId());

除了添加之外,还有其他方法可以解决此问题@SuppressWarnings("unchecked")吗?


问题答案:

您的JSONObject是什么,它是从HashMap继承的吗?如果是,则警告可能意味着您应该声明JSONObject实例,如下所示:

JSONObject<String,Object> obj=new JSONObject<String,Object>();

更新:查看JSONObject的定义:

public class JSONObject extends HashMap

它扩展了HashMap,但不支持参数类型(如果其定义为

public class JSONObject<K,V> extends HashMap<K,V>

然后我们可以写

JSONObject<String,Object> obj=new JSONObject<String,Object>();

并且put方法将不再生成警告



 类似资料:
  • 问题内容: Java警告 是什么意思? 类型安全性:从Object到List 的强制转换实际上是针对擦除的List类型进行检查 当我尝试将Object强制转换为具有通用信息的类型时,会收到此警告,例如以下代码: 问题答案: 出现此警告是因为Java在运行时实际上并未在使用泛型的对象中存储类型信息。因此,如果实际上是a ,则在运行时将没有任何内容,除非直到从列表中访问的项目与变量中定义的通用类型不匹

  • 我有一个通用类。它看起来像这样: 显然,conevertdatajsonstring方法仅在字符串类型为T时调用。但有一个警告: 类型安全:未选中从字符串转换为T 有没有一种方法可以在不使用SuppressWarnings的情况下解决此问题: @抑制警告(“未选中”) 方法之前?

  • 如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或

  • 问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符

  • 如果在Java中创建泛型类(该类具有泛型类型参数),是否可以使用泛型方法(该方法采用泛型类型参数)? 考虑下面的例子: 正如您所期望的那样,对于任何对象,的实例,我都可以调用: 但是,如果我试图使用的实例而不指定泛型类型,那么调用将返回一个

  • 我试图创建一个Java方法,它接受一个对象类型和它应该转换成的数据类型。 例如,如果我应该能够返回一个值1作为Int或双根据需要。我使用类传递数据类型作为参数。 问题:如何使方法泛型以接受基于输入参数的返回类型? 下面的代码只是一个示例,它可能在语法上不正确,用于解释我的问题。