将对象转换为接口并返回 java
Convert object to interface and back in java
我有一个接口 A,它有一个方法:
public interface A { public double doSth(); }
和实现 A 并具有其他方法的 B class:
class B implements A {
private String name;
@Override
public double doSth();//returns the lenght of the name
public void getName(){}
}
在主体 class 中,我有一个 A 类对象的数组列表和一个从数组列表中查找具有 doSth() 和 [=27= 最大值的对象的方法] 对此对象的引用。
public class Main {
public static void main(String[] args) {
ArrayList<A> array = new ArrayList<>();
}
public static A a(ArrayList<A> array){
A aObject = null;
double temp = 0;
for (A bObject: array){
if(bObject.doSth()>temp){
temp = aObject.doSth();
aObject = bObject;
}
}
return aObject;
}
我需要做的是在main中使用这个方法,然后打印一个方法作为A类对象返回的对象的名称。是否有可能做到这一点?是否有可能将 A 对象转换回 B class?
是的。使用 instanceof
,您可以测试哪种类型的 class 实现了您的 interface
,然后将其转换为 class。
例如:
List<A> myList = getMyList();
A foo= a(myList);
if (foo instanceof B) {
B bar = (B)foo;
System.out.println(bar.getName());
}
我有一个接口 A,它有一个方法:
public interface A { public double doSth(); }
和实现 A 并具有其他方法的 B class:
class B implements A {
private String name;
@Override
public double doSth();//returns the lenght of the name
public void getName(){}
}
在主体 class 中,我有一个 A 类对象的数组列表和一个从数组列表中查找具有 doSth() 和 [=27= 最大值的对象的方法] 对此对象的引用。
public class Main {
public static void main(String[] args) {
ArrayList<A> array = new ArrayList<>();
}
public static A a(ArrayList<A> array){
A aObject = null;
double temp = 0;
for (A bObject: array){
if(bObject.doSth()>temp){
temp = aObject.doSth();
aObject = bObject;
}
}
return aObject;
}
我需要做的是在main中使用这个方法,然后打印一个方法作为A类对象返回的对象的名称。是否有可能做到这一点?是否有可能将 A 对象转换回 B class?
是的。使用 instanceof
,您可以测试哪种类型的 class 实现了您的 interface
,然后将其转换为 class。
例如:
List<A> myList = getMyList();
A foo= a(myList);
if (foo instanceof B) {
B bar = (B)foo;
System.out.println(bar.getName());
}