Java扫描对象

时间:2016-06-18 13:14:51

标签: java class object

我有一个使用Region类对象的方法,因为我需要扫描该对象的另一个方法使用此方法,因此我可以应用该方法。

public void changeBusinessPermitTile(Region region){
        if(getRegion()==null) {
            Region i;
            Scanner scanner = null;
            try {
                System.out.print("Please insert the region: ");
                scanner = new Scanner(System.in);
                i = scanner.//this is the missing part
                setRegion(i);
            } finally {
                if (scanner!=null) 
                    scanner.close();
            }
        }
}

所以我想要的是当我写例如

Region region1 = new Region(Landscape.COAST);
Region region2 = new Region(Landscape.HILL);
Region region3 = new Region(Landscape.MOUNTAIN);

当我写region1,region2或region3

时,该方法应该能够扫描

2 个答案:

答案 0 :(得分:1)

您可以将Landscape视为String并初始化实例,如

 Region r = new Region(Landscape.valueOf(scanner.nextLine()));

此外,您可以创建自己的小池(Map<String, Region>),其中保留Region个实例。它看起来像Flyweight pattern

if (map.get(scanner.nextLine()) == null) {
    // create an instance and put it in the map
} else {
    // return old value from the map
}

答案 1 :(得分:0)

好的,我想我理解你的问题,简而言之,你试图将Region与String相关联。如果是这样,则规范解决方案是使用Map,例如使用抽象类型Map<String, Region>,您可能将其实例化为HashMap<String, Region>。然后,您将使用put(String key, Region value)方法使用字符串/区域对填充地图,然后使用地图的get(String key)方法根据键字符串获取区域。

我仍然对您的整体计划设计感到担忧,但这是一个单独的问题。

例如:

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class RegionFun {
    public static void main(String[] args) {
        Map<String, Region> regionMap = new HashMap<>();
        regionMap.put("coast", new Region(Landscape.COAST));
        regionMap.put("Hill", new Region(Landscape.HILL));
        regionMap.put("mountain", new Region(Landscape.MOUNTAIN));

        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter location of region: ");
        String input = scanner.nextLine().toLowerCase();

        Region region = regionMap.get(input);

        System.out.println("Selected Region: " + region);
    }
}

enum Landscape {
    COAST, HILL, MOUNTAIN
}

class Region {
    private Landscape landscape;

    public Region(Landscape landscape) {
        this.landscape = landscape;
    }

    @Override
    public String toString() {
        return "Region [landscape=" + landscape + "]";
    }
}