我正在创建一个接受对象列表作为参数的新类。
但是我想做到这一点,只要这些对象有某些方法就可以是这些对象,例如返回单个.getValue()
或double
方法的.getTimestamp()
方法返回单个long
等
可以这样做吗?
答案 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;。