Java:制作一张地图<&燃气轮机;变量泛型

Java:制作一张地图<&燃气轮机;变量泛型,java,generics,Java,Generics,我需要将变量和值成对存储在某个地方,我倾向于使用Map。问题是值的类型会有所不同,所以我认为应该使用泛型。所以我试过这样的方法: Map<String, T> netPara; Map-netPara; 当然,它不起作用,然后我尝试了 Map<String, Object> netPara; Map-netPara; 这是可行的,但当我检索值时,它只返回Object类型,而不是“boolean”、“int” 有人能帮我吗?我相信这很简单,但我还不是专家。提前谢谢

我需要将变量和值成对存储在某个地方,我倾向于使用Map。问题是值的类型会有所不同,所以我认为应该使用泛型。所以我试过这样的方法:

Map<String, T> netPara;
Map-netPara;
当然,它不起作用,然后我尝试了

Map<String, Object> netPara;
Map-netPara;
这是可行的,但当我检索值时,它只返回Object类型,而不是“boolean”、“int”

有人能帮我吗?我相信这很简单,但我还不是专家。提前谢谢

事实上,我有一个函数a,它接收一个参数列表,但函数B也会使用这些参数,但B的参数列表是可视的,因此我希望将它们存储为类参数,并由函数B重用。因此,我所做的是:

Class Person() {
Map<String, T> infoPaire; // if I use Object to replace T
Function A: receiver(boolean b, int i, String1 st1, String2 st2) {
    infoPaire.put("b", b);
    infoPaire.put("i", i);
    infoPaire.put("st1", st1);
    infoPaire.put("st2", st2);
}

Function B: user() {
    boolean b = infoPaire.get("b"); // I need to add (boolean) to cast and I dont want it, it's ugly
    int i = infoPaire.get("i");
    String st1 = infoPaire.get("st1");
    String st2 = infoPaire.get("st2");
}
Class-Person(){
Map infoPaire;//如果我使用对象替换T
函数A:接收器(布尔b、整数i、字符串1 st1、字符串2 st2){
infoPaire.put(“b”,b);
infoPaire.put(“i”,i);
infoPaire.put(“st1”,st1);
infoPaire.put(“st2”,st2);
}
函数B:用户(){
boolean b=infoPaire.get(“b”);//我需要将(boolean)添加到cast中,我不想要它,它很难看
int i=infoPaire.get(“i”);
字符串st1=infoPaire.get(“st1”);
字符串st2=infoPaire.get(“st2”);
}

您可以将其中一种类型设置为类型参数,但还必须将其声明为类型参数。仅为其指定一个字母名称(如
T
)不会自动将其设置为类型参数

class MyClass<T> {   // Note: T is a type parameter
    private Map<String, T> netPara;

    // ...
}
class MyClass{//注意:T是一个类型参数
私有地图;
// ...
}

您可以将其中一种类型设置为类型参数,但还必须将其声明为类型参数。仅为其指定一个字母名称(如
T
)不会自动将其设置为类型参数

class MyClass<T> {   // Note: T is a type parameter
    private Map<String, T> netPara;

    // ...
}
class MyClass{//注意:T是一个类型参数
私有地图;
// ...
}

您最希望的是一种类型的值对象和一种类型化的getter方法,该方法具有不安全的强制转换:

class VariableMap extends HashMap<String, Object> {
   public <T> T getValue(Object key) {
       return (T)super.get(key);
   }
{
类VariableMap扩展了HashMap{
公共T getValue(对象键){
return(T)super.get(key);
}
{

您最希望的是一种类型的值对象和一种类型化的getter方法,该方法具有不安全的强制转换:

class VariableMap extends HashMap<String, Object> {
   public <T> T getValue(Object key) {
       return (T)super.get(key);
   }
{
类VariableMap扩展了HashMap{
公共T getValue(对象键){
return(T)super.get(key);
}
{

T
需要定义为类或方法上的泛型参数

方法 或者通过类型推断

Test<String> t = new Test<>;
这是不可能的。因为
T
虽然是泛型的,但最终必须解析为类实例的单个类型。例如

Map<String, Integer> m;
Map-m;
此映射只能保存整数值

Object
声明为值之所以有效,是因为Java中的每个类都是
Object
的子类,所以任何东西都可以放在其中。但是使用
Object
是非常糟糕的设计。
您实际上是在关闭类型系统,这是像Java这样的语言的主要优势之一gs到表中,静态键入


因此,如果您发现自己想要存储一组同质值,您可能需要重新考虑您的设计,即使是在明确允许此类内容的语言中(scheme、python、JavaScript等)以同质方式使用它们通常是设计缺陷的标志。

T
需要定义为类或方法上的通用参数

方法 或者通过类型推断

Test<String> t = new Test<>;
这是不可能的。因为
T
虽然是泛型的,但最终必须解析为类实例的单个类型。例如

Map<String, Integer> m;
Map-m;
此映射只能保存整数值

Object
声明为值之所以有效,是因为Java中的每个类都是
Object
的子类,所以任何东西都可以放在其中。但是使用
Object
是非常糟糕的设计。
您实际上是在关闭类型系统,这是像Java这样的语言的主要优势之一gs到表中,静态键入

因此,如果您发现自己想要存储一组同质值,您可能需要重新考虑您的设计。即使是在明确允许此类内容的语言(scheme、python、JavaScript等)中,以同质方式使用它们通常是设计缺陷的标志。

您需要理解并首先考虑。 就您的问题而言,对象类位于继承的顶层,这意味着对象是所有java类的父类

因此,您可以将任何对象强制转换为对象类而不进行强制转换,但当您需要将对象重新转换为其实际类时,您必须强制转换它。例如
String str=(String)netPara.get(key);

你需要研究多态性、铸造和泛型概念。泛型来解决你现在面临的问题。

你需要先理解和理解。 就您的问题而言,对象类位于继承的顶层,这意味着对象是所有java类的父类

因此,您可以将任何对象强制转换为对象类而不进行强制转换,但当您需要将对象重新转换为其实际类时,您必须强制转换它。例如
String str=(String)netPara.get(key);


您需要研究多态性、强制转换和泛型概念。泛型来解决您目前面临的问题。

以下是将元素放入映射的方法检查一下

 public class TakingInput {

public static void main(String[] args) {

Map<String,Object> map=new HashMap<String,Object>();

Integer in=new Integer(123);

Object obj=in;

String s=new String("suresh");

Object obj2=s;

map.put("hi",obj);

map.put("ramesh",obj2);

System.out.println(map);

  //to retrive 

 String ss=(String) map.get("ramesh"); //type casting

System.out.println(ss); //o/p:suresh


}

 }
公共类获取输入{
公共静态void main(字符串[]args){
Map Map=newhashmap();
整数in=新整数(123);
对象obj=in;
字符串s=新字符串(“suresh”);
对象obj2=s;
地图放置(“hi”,obj);
map.pu
Test<String> t = new Test<>;
Map<String, String> m = t.getMap();
Test<Integer> t2 = new Test<>;
Map<String, Integer> m2 = t2.getMap();
m.put('int', 7)
m.put('bool', true)
Map<String, Integer> m;
 public class TakingInput {

public static void main(String[] args) {

Map<String,Object> map=new HashMap<String,Object>();

Integer in=new Integer(123);

Object obj=in;

String s=new String("suresh");

Object obj2=s;

map.put("hi",obj);

map.put("ramesh",obj2);

System.out.println(map);

  //to retrive 

 String ss=(String) map.get("ramesh"); //type casting

System.out.println(ss); //o/p:suresh


}

 }
BigDecimal n = dictionary.get("n");
String s = dictionary.get("s");
class Dictionary {
    public <T> T get(String name) { ... }
BigDecimal n = dictionary.get(BigDecimal.class, "n");
String s = dictionary.get(String.class, "s");
public class Dictionary {
    private Map<String, Object> map = new HashMap<>();

    public <S> S put(Class<S> type, String name, S value) {
        Object oldValue = map.put(name, value);
        return type.cast(oldValue);
    }

    public <T> T get(Class<T> type, String name) {
        Object value = map.get(name);
        return type.cast(value);
    }
}
Map<String, String> m = new HashMap<>();
m.put("bool", "true");
m.put("int", "1");

Integer i = Integer(m.get("int"));
Boolean b = Boolean(m.get("bool"));
Map<String, String> stringMap;
Map<String, Integer> intMap;
Map<String, Boolean> boolMap;