Java 设置接口问题和对象

Java 设置接口问题和对象,java,object,collections,set,Java,Object,Collections,Set,很抱歉,题目不好,但我找不到合适的写作方法。(如果理解错误,请更正主题) 所以我的问题是: 我有接口形状和两个类实现在这个圆和正方形之后。 我需要写一个收集圆形和方形的类。它必须是不会添加任何重复对象的收集方法之一。在阅读了java文档之后,我选择了“set”。但我不确定这是否是个好主意。(我可以使用四种方法之一:map.set.list.或queque) 毕竟,我创建了另一个名为ShapeSet和method的类 public void ShapeSet(Shape Set) 看起来是这样的

很抱歉,题目不好,但我找不到合适的写作方法。(如果理解错误,请更正主题)

所以我的问题是: 我有接口形状和两个类实现在这个圆和正方形之后。 我需要写一个收集圆形和方形的类。它必须是不会添加任何重复对象的收集方法之一。在阅读了java文档之后,我选择了“set”。但我不确定这是否是个好主意。(我可以使用四种方法之一:map.set.list.或queque)

毕竟,我创建了另一个名为ShapeSet和method的类

public void ShapeSet(Shape Set)
看起来是这样的:

public class ShapeSet {
    public ShapeSet() {}

    Set <Shape> setting; //is it wrong? 
    public void addShape(Shape shape) {
    setting.add(shape);
    }
...

}
public static void main(String[] args) {
    Set<Shape> ss = new HashSet<Shape>(); // or some other Set concrete class
    Shape c = new Circle(3);
    Shape s = new Square(4);
    ss.add(c);
    ss.add(s);
    ss.iterator(); // actually, you'd want to do something with the iterator
}

但在运行程序时,我在ss.addShape(x)行上遇到了错误,netbeans抱怨说他发现了null异常。为什么?(我认为输入到方法shapeset的类型是错误的,可能是声明集合设置的错误位置。但是如何修复呢?我完全是java新手。非常感谢您的帮助。提前感谢。

您忘了初始化字段
设置

public class ShapeSet {
    public ShapeSet() {}

    Set <Shape> setting = new HashSet<Shape>();

    public void addShape(Shape shape) {
        setting.add(shape);
    }
...

}
公共类形状集{
公共形状集(){}
Set setting=新的HashSet();
公共空心形状(形状){
设置。添加(形状);
}
...
}

关于NullPointerException的答案可能是因为在ShapeSet类中,您没有像中那样分配成员字段“设置”

Set <Shape> setting = new HashSet<Shape>();
Set setting=newhashset();

然而,我的问题是,为什么要有一个ShapeSet类?似乎你只需要在有main方法的类中设置一个字段。

我同意@MeBigFatGuy-你不需要你的
ShapeSet
类。你可以这样编码你的main:

public class ShapeSet {
    public ShapeSet() {}

    Set <Shape> setting; //is it wrong? 
    public void addShape(Shape shape) {
    setting.add(shape);
    }
...

}
public static void main(String[] args) {
    Set<Shape> ss = new HashSet<Shape>(); // or some other Set concrete class
    Shape c = new Circle(3);
    Shape s = new Square(4);
    ss.add(c);
    ss.add(s);
    ss.iterator(); // actually, you'd want to do something with the iterator
}
publicstaticvoidmain(字符串[]args){
Set ss=new HashSet();//或其他一些Set具体类
形状c=新的圆(3);
形状s=新正方形(4);
ss.添加(c);
ss.添加(s);
ss.iterator();//实际上,您需要对迭代器执行一些操作
}

是的,它能工作:)谢谢@Howard和@MeBigFatGuy。我能以某种方式返回集合中的项目数吗?我猜迭代器可以完成这项工作,对吧?@MichałMokrzycki如果你只想知道数字,请使用ss.size()