为什么map&#39的put方法现在直接在课堂上了?

时间:2017-02-21 10:43:52

标签: java core

==

为什么此代码中不允许使用public static bool operator == (VectorF left, object right) { if (object.ReferenceEquals(null, right)) { // handle null case } VectorF rightF = right as VectorF; if (!object.ReferenceEquals(null, rightF)) { // Compare VectorF } VectorI rightI = right as VectorI; if (!object.ReferenceEquals(null, rightI)) { // Compare VectorI } // and so on... } 函数?

3 个答案:

答案 0 :(得分:2)

如果您想在对象初始化过程中运行一些代码,请将其放在大括号中:

public class Demo{
    Map<String,String> test = new HashMap<String,String>();

    {   // This is now part of object initialization
        test.put("A","A");
        System.out.println(test);
    }
}
在类声明部分中不允许使用

put或任何其他方法调用,因为Java不知道何时运行此代码。该语言具有关于运行可执行代码的特定规则:它既可以是方法调用的一部分,也可以是对象或类初始化。

花括号中的代码成为对象初始化的一部分。只要您运行Demo d = new Demo() test地图,就会{"A", "A"}插入{{1}},并且会打印地图本身。请注意,打印输出不会很漂亮。有关详细信息,请参阅this Q&A

答案 1 :(得分:0)

这不是Java的工作方式。如果要在加载类时实现此put,可以尝试使用static块。

public class Demo{
    static Map<String,String> test = new HashMap<String,String>();
    static{
        test.put("A","A");
        System.out.println(test);
    }
}

或者如果您希望在每次创建对象时对其进行初始化,请将其保存在适当的构造函数中或仅保留默认执行块(类似于static,但不包含static关键字)。

public class Demo{
    Map<String,String> test = new HashMap<String,String>();
    public Demo(){
        test.put("A","A");
        System.out.println(test);
    }
}

答案 2 :(得分:0)

要在类中执行某些,您需要在类中定义一个方法,该类本身包含某些内容

你做了: class - &gt; 东西

正确: class - &gt;方法 - &gt; 东西