Java 为数据结构定义泛型/变量类型

Java 为数据结构定义泛型/变量类型,java,generics,type-conversion,Java,Generics,Type Conversion,我有一个数据结构(LinkedHashMap),但问题是(第二个)值应该是变量类型,因为我可以将类型String或类型int或任何基元类型放在那里,所以我的问题是: 有没有一种方法可以为它定义一个可以获取任何值类型的变量类型 这就是我所拥有的: private LinkedHashMap<String, String> keyVal; private-LinkedHashMap-keyVal; 我想要这样的东西: private LinkedHashMap<String,

我有一个数据结构(
LinkedHashMap
),但问题是(第二个)值应该是变量类型,因为我可以将类型
String
或类型
int
或任何基元类型放在那里,所以我的问题是:

有没有一种方法可以为它定义一个可以获取任何值类型的变量类型

这就是我所拥有的:

private LinkedHashMap<String, String> keyVal;
private-LinkedHashMap-keyVal;
我想要这样的东西:

private LinkedHashMap<String, anyValue> keyVal;
private-LinkedHashMap-keyVal;

泛型类型不能是基元类型。如果您希望能够在地图中存储任何内容,可以将地图的“值”通用类型设置为
对象

private LinkedHashMap<String, Object> keyVal;
将放置一个
整数
,即使您指定了
int

私有LinkedHashMap keyVal;
private LinkedHashMap<String, Object> keyVal;
您可以使用
Object
进行此操作。但是请记住,在尝试从该映射返回数据时(稍后某个时间),您可能会遇到将
对象
转换为所需数据类型的困难,因为您可能不知道实际存在的数据类型


因此,避免这种实现是明智的。

不,第二个参数是
对象

现在,我建议您重新思考您需要完成什么,因为这实际上违背了泛型的创建目的

如果您有一个绑定类型,并且希望保持一些灵活性,那么您可以使用类似于
的东西

在Java中,在同一数据结构中混合几种类型的对象是不可取的(如果这是好的或坏的,那就无关紧要了),但是类型安全在防止出现奇怪的错误方面有很大的作用


当您实际需要检索对象时,请尝试思考如何处理此问题。。。你会认为它们是弦吗?你打算用它们做什么?

你说你想要一个地图

A由指定,原语为NumericType或
boolean
,NumericType为integrationType或FloatingPointType

如果您的需要不是primitive,而是NumericType,则可以使用
java.lang.Number

Map< String, Number >
如果在
float
保持器上调用
getInt()
,则由您执行一些检查并抛出异常。一切皆有可能,例如像C语言这样的转换类型

编辑

你也需要绳子,还有

您必须添加以下
private short sValue进入
Any
类:

private String sValue;
并将下面的
SHORT,
输入到
类型
枚举中:

STRING,
但是,正如其他人所说,最好的方法是避免使用这些弱类型(Foure用法语兜售)。

您可以使用

private LinkedHashMap<String, Object> keyVal;
如您所见,这允许您将允许的类型限制为一个公共属性(即,作为更一般类型的子类)。通过这种方式,您可以将映射的值用作更一般类的对象,因为它是您所知道(以及想要知道)的关于对象的一切

  • 最好看一下:
  • 注意什么时候应该使用通配符(?),并且应该使用泛型
  • LinkedHashMap keyVal类型中使用对象
    
    正如一些人所说,您可以将Object用于泛型变量类型,尤其是在使用泛型方法或不知道用户将使用什么数据类型时,比如下面这个简单的方法:

    import java.util.Scanner;
    
    public class GenericMethod {
        public static void main(String[] args) {
            System.out.println("Type something that's yours: ");
    
            Scanner sc = new Scanner(System.in);
    
            Object thing;
            thing = sc.next();
            isMine(thing);
        }
    
        // Generic Method
        public static <T> void isMine(T x) {
            System.out.println(x + " is mine.");
        }
    }
    
    import java.util.Scanner;
    公共类泛型方法{
    公共静态void main(字符串[]args){
    System.out.println(“键入属于您的内容:”);
    扫描仪sc=新的扫描仪(System.in);
    客观事物;
    thing=sc.next();
    伊斯明(事物);
    }
    //通用方法
    公共静态空隙率(T x){
    System.out.println(x+“是我的”);
    }
    }
    
    这正是泛型试图避免的!如果你需要这个,你想要完成的事情很可能有问题。但是如果你想这样做,
    我假设你想使用
    java.util.LinkedHashMap
    但不想指定第二个类型参数?好的,但是如果我有字符串,我应该如何处理它?你能考虑其他解决方案吗,我试图做的是将json对象绑定到键值列表,然后使用相应的类型处理它。。。
    private LinkedHashMap<String, Object> keyVal;
    
    private LinkedHashMap<String, ? extends Serializable> keyVal;
    
    import java.util.Scanner;
    
    public class GenericMethod {
        public static void main(String[] args) {
            System.out.println("Type something that's yours: ");
    
            Scanner sc = new Scanner(System.in);
    
            Object thing;
            thing = sc.next();
            isMine(thing);
        }
    
        // Generic Method
        public static <T> void isMine(T x) {
            System.out.println(x + " is mine.");
        }
    }