如何在一个包装器对象中包装不同类型的对象

时间:2013-06-21 12:43:29

标签: java

我有一个条件,我需要使用固定的方法签名,可以接受不同类型的对象。我认为一个解决方案是使用超类,并将所有作为子类。然而,我们解决这个问题是否有任何优秀的设计模式解决方案

一旦方法获得某种类型的对象,我们可以知道没有instanceof检查的实例类型吗? 请建议。

2 个答案:

答案 0 :(得分:1)

实现接口是一种比继承超类更好的模式。以这种方式,你的类保留了它们的一个继承容量。

关于instanceOf的另一个问题,很少有真正需要确定对象的实际类。你总是可以诉诸多态。将您需要调用的所有方法放在接口本身的对象上。这样你就不需要知道实际的类型了。

答案 1 :(得分:1)

您的问题有点不透明,可以用两种不同的方式解释:

在一个班级中实施不同的行为

假设您有两个不同的类:CatDog。然后你有一个班级Animals,并希望做这样的事情:

Cat cat = new Cat();
Dog dog = new Dog();

Animals animals = new Animals();
animals.feed(cat);
animals.feed(dog);

此处feed()执行不同的代码,具体取决于参数类型:

public class Animals {
    public void feed(Cat cat) {
        // ... feed the cat
    }

    public void feed(Dog dog) {
        // ... feed the dog
    }
}

这称为method overloading

在不同的类中实施不同的行为

另一方面,你可以定义一个提供方法的接口Pet,比方说eat()

public interface Pet {
    void eat();
}

然后CatDog应该实施Pet以获得不同的行为:

public class Cat implements Pet {
    public void eat() {
        //...
    }
}

public class Dog implements Pet {
    public void eat() {
        //...
    }
}

然后你的班级Animals会是这样的:

public class Animals {
    public void feed(Pet pet) {
        pet.eat();
    }
}