强制对象有特定的方法吗?

时间:2016-05-06 20:40:54

标签: java oop object polymorphism

我正在创建一个接受对象列表作为参数的新类。

但是我想做到这一点,只要这些对象有某些方法就可以是这些对象,例如返回单个.getValue()double方法的.getTimestamp()方法返回单个long

可以这样做吗?

4 个答案:

答案 0 :(得分:7)

您可以使用interface或实施继承

 interface Foo{
   long getTimestamp();
 }

 class Bar implements Foo{
   ... impl ..
 }

然后你的方法将采用Foo(超类型)的子类型列表

 void fn(List<? extends Foo> foos){
    for(Foo foo:foos){
      long time = foo.getTimestamp();
    }
 } 

答案 1 :(得分:2)

只要您定义了这些对象,就可以使用界面执行此操作:

interface MyInterface {
    double getValue();
    long getTimestamp();
}

class MyClass1 implements MyInterface {
    @Override
    public double getValue() {
        // ...
    }

    @Override
    public long getTimestamp() {
        // ...
    }
}

void someMethod(List<MyInterface> items) {
    for (MyInterface item : items) {
        double value = item.getValue();
        long timestamp = item.getTimestamp();
        // ...
    }
}

如果您没有定义这些对象的类,则无法在编译时强制执行它。通过精心设计和丑陋的反射黑客,可以在运行时执行它。

答案 2 :(得分:0)

界面可以帮助您解决问题。您可以为您在其中提供的以下每个声明单独实施。 干杯。 :)

答案 3 :(得分:0)

我想你想要反思。您无法控制可能传递给代码的对象类型,您只是希望能够检查它们是否符合您的标准。对?当他们这样做时,你希望能够调用预期的方法。

搜索&#34; Java反思&#34;。