Java 初始化对象并将其放入HashMaps的不同方法
我一直在玩HashMaps,并意识到在没有main()的类中实例化HashMaps时,在具有main()的类中实例化HashMaps的行为会有所不同 Demo.javaJava 初始化对象并将其放入HashMaps的不同方法,java,collections,hashmap,java-collections-api,Java,Collections,Hashmap,Java Collections Api,我一直在玩HashMaps,并意识到在没有main()的类中实例化HashMaps时,在具有main()的类中实例化HashMaps的行为会有所不同 Demo.java import java.util.HashMap; public class Demo { public static void main(String args[]) { System.out.println(new Circle()); HashMap<String, Object
import java.util.HashMap;
public class Demo {
public static void main(String args[]) {
System.out.println(new Circle());
HashMap<String, Object> shapes = new HashMap<String,Object>();
shapes.put("Circle", new Circle());
}
}
import java.util.HashMap;
abstract class GeometricObject
{
HashMap<String, Object> shapes = new HashMap<String,Object>(); //error
shapes.put("Circle", new Circle()); //error
}
import java.util.HashMap;
class GeometricObject
{
public static HashMap<String, Object> giveMeNewShapesDude() {
HashMap<String, Object> shapes = new HashMap<String,Object>();
shapes.put("Circle-1", new Circle());
shapes.put("Circle-2", new Circle());
shapes.put("Circle-3", new Circle());
return shapes;
}
}
import java.util.HashMap;
public class Demo {
public static void main(String args[]) {
HashMap<String, Object> shapes = GeometricObject.giveMeNewShapesDude();
system.out.println("Shapes : " + shapes);
}
}
import java.util.HashMap;
公开课演示{
公共静态void main(字符串参数[]){
System.out.println(新圆圈());
HashMap shapes=新建HashMap();
放置(“圆圈”,新圆圈());
}
}
GeometricObject.java
import java.util.HashMap;
public class Demo {
public static void main(String args[]) {
System.out.println(new Circle());
HashMap<String, Object> shapes = new HashMap<String,Object>();
shapes.put("Circle", new Circle());
}
}
import java.util.HashMap;
abstract class GeometricObject
{
HashMap<String, Object> shapes = new HashMap<String,Object>(); //error
shapes.put("Circle", new Circle()); //error
}
import java.util.HashMap;
class GeometricObject
{
public static HashMap<String, Object> giveMeNewShapesDude() {
HashMap<String, Object> shapes = new HashMap<String,Object>();
shapes.put("Circle-1", new Circle());
shapes.put("Circle-2", new Circle());
shapes.put("Circle-3", new Circle());
return shapes;
}
}
import java.util.HashMap;
public class Demo {
public static void main(String args[]) {
HashMap<String, Object> shapes = GeometricObject.giveMeNewShapesDude();
system.out.println("Shapes : " + shapes);
}
}
import java.util.HashMap;
抽象类几何对象
{
HashMap shapes=新建HashMap();//错误
shapes.put(“圆”,new Circle());//错误
}
在没有main()的类中初始化HashMap的正确方法是什么?main只是一个void(方法),与其他方法一样,只是作为第一个执行。如果您想像这样放置代码,请将其放入void或任何其他返回任何类型的方法(可能是静态的或实例的-无所谓)中
public void noReturn(){
HashMap shapes=新建HashMap();
放置(“圆圈”,新圆圈());
}
公共int returnsInt(){
HashMap shapes=新建HashMap();
放置(“圆圈”,新圆圈());
返回1;
}
您还可以返回HashMap:
public Map returnNewMap(){
HashMap<String, Object> shapes = new HashMap<String,Object>();
shapes.put("Circle", new Circle());
return shapes; //here's your HashMap returned
}
publicmap returnNewMap(){
HashMap shapes=新建HashMap();
放置(“圆圈”,新圆圈());
return shapes;//这是返回的HashMap
}
您可以使用双括号初始化,如下所示:
Map<String,Object> map = new HashMap<String,Object>() {
{
put("circle", new Circle());
}
};
Map Map=newhashmap(){
{
放置(“圆圈”,新圆圈());
}
};
此代码不在方法或静态块中。此代码不能在类的主体中自由执行。这将导致编译错误。初始化块:
abstract class GeometricObject
{
HashMap<String, Object> shapes = new HashMap<String,Object>();
{
shapes.put("Circle", new Circle());
}
}
抽象类GeometricObject
{
HashMap shapes=新建HashMap();
{
放置(“圆圈”,新圆圈());
}
}
我认为您的问题在于您正在抽象类中实例化HashMap,使该类成为非抽象类或子类,错误应该消失。我在很多类中使用过Hashmaps,从来没有遇到过问题,下面是Oracle抽象类的定义
抽象类与接口的比较
抽象类类似于接口。您不能实例化它们,它们可能包含使用或不使用实现声明的方法的混合。但是,对于抽象类,您可以声明非静态和最终的字段,并定义公共、受保护和私有的具体方法。对于接口,所有字段都自动是公共的、静态的和最终的,并且您声明或定义的所有方法(作为默认方法)都是公共的。此外,您只能扩展一个类,不管它是否抽象,而您可以实现任意数量的接口。这是实现所需功能的一种方法,但不是唯一的方法
GeometricObject.java
import java.util.HashMap;
public class Demo {
public static void main(String args[]) {
System.out.println(new Circle());
HashMap<String, Object> shapes = new HashMap<String,Object>();
shapes.put("Circle", new Circle());
}
}
import java.util.HashMap;
abstract class GeometricObject
{
HashMap<String, Object> shapes = new HashMap<String,Object>(); //error
shapes.put("Circle", new Circle()); //error
}
import java.util.HashMap;
class GeometricObject
{
public static HashMap<String, Object> giveMeNewShapesDude() {
HashMap<String, Object> shapes = new HashMap<String,Object>();
shapes.put("Circle-1", new Circle());
shapes.put("Circle-2", new Circle());
shapes.put("Circle-3", new Circle());
return shapes;
}
}
import java.util.HashMap;
public class Demo {
public static void main(String args[]) {
HashMap<String, Object> shapes = GeometricObject.giveMeNewShapesDude();
system.out.println("Shapes : " + shapes);
}
}
import java.util.HashMap;
类几何对象
{
publicstatichashmap提供menewshapedude(){
HashMap shapes=新建HashMap();
放置(“圆圈-1”,新圆圈());
放置(“圆圈-2”,新圆圈());
放置(“圆圈-3”,新圆圈());
返回形状;
}
}
Demo.java
import java.util.HashMap;
public class Demo {
public static void main(String args[]) {
System.out.println(new Circle());
HashMap<String, Object> shapes = new HashMap<String,Object>();
shapes.put("Circle", new Circle());
}
}
import java.util.HashMap;
abstract class GeometricObject
{
HashMap<String, Object> shapes = new HashMap<String,Object>(); //error
shapes.put("Circle", new Circle()); //error
}
import java.util.HashMap;
class GeometricObject
{
public static HashMap<String, Object> giveMeNewShapesDude() {
HashMap<String, Object> shapes = new HashMap<String,Object>();
shapes.put("Circle-1", new Circle());
shapes.put("Circle-2", new Circle());
shapes.put("Circle-3", new Circle());
return shapes;
}
}
import java.util.HashMap;
public class Demo {
public static void main(String args[]) {
HashMap<String, Object> shapes = GeometricObject.giveMeNewShapesDude();
system.out.println("Shapes : " + shapes);
}
}
import java.util.HashMap;
公开课演示{
公共静态void main(字符串args[]){
HashMap shapes=GeometricObject.giveMeNewShapesDude();
system.out.println(“形状:“+Shapes”);
}
}
在此之后,只需执行一个步骤,学习。import java.util.HashMap;
抽象类几何对象
{
散列图形状;
{shapes=newhashmap(){{
放置(“圆圈”,新圆圈());
放置(“方形”,新方形());
}};}
}
您的代码“GeometricObject.java”不在方法中。这是不正确的哇!在很短的时间内,8个答案回答了一个质量有问题的问题。由于您的评论//错误(第一条),我(现在仍然)感到困惑。因为删除shapes.put…
行肯定会给你一个语法正确的答案…请检查-这通常不是一个好主意。我认为这对于他的用例来说是好主意。我不认为在每种情况下这都是一个坏主意。我提供链接只是为了提高人们对这种构造真正含义的认识。实际尝试代码时,向上投票对您有利。。。以新对象()结束(
…:-)@Hillenew Object()
:)-不错,我以前尝试过这种变体,但我仍然不了解单大括号和双大括号之间的区别。双大括号:初始化块