gpt4 book ai didi

java - 如何将一种类型(接口(interface))的对象转换为另一种类型(接口(interface))?

转载 作者:行者123 更新时间:2023-12-01 12:54:23 27 4
gpt4 key购买 nike

我有一个接口(interface)Interface1,它已由类A实现,并且设置了一些私有(private)变量值,并且我将类A的对象发送到下一个接受输入作为Interface2的类。那么我怎样才能将这个引用Interface1的对象转换为Interface2呢?

interface Interface1{}
interface Interface2{}

class A implements Interface1 {
private int id;

public void setId(int id)
{
this.id = id;
}
}

class B {
Interface1 call(Interface1 i)
{
C c = new C();
c.call2(i); //this should be of type Interface2 so how to do this
return i;
}

public static void main(String arg[])
{
Interface1 i = new A();
i.setId(5);
B b = new B();
b.call(i);
}
}

class c {
Interface2 call2(Interface2 i)
{
return i;
}
}

最佳答案

给定Interface1Interface2是两个完全不相关的接口(interface),怎么假设 A实例可以用作 Interface2A甚至可能没有Interface2定义的方法。

您可以采取多种方法来使设计更加正确。

首先,如果你想保留 Interface1 和 2 作为两个不相关的接口(interface),你应该有 A实现它们:

class A implements Interface1, Interface2 {

至少你可以在 B#call() 中为此做一些转换:

if (i instanceof Interface2) {
Interface2 i2 = (Interface2) i;
....
c.call2(i2);
}

如果在你的设计中,Interface1和2有继承关系是合适的,故事可能会更容易一些:

interface Interface1 extends Interface2 {

然后Interface1就可以直接作为Interface2使用了。

另一种可能性是,如果您知道,无论您通过 Interface1 提供什么,它都可以以某种方式用作 Interface2(例如,类似于 Java 的 Runnable 和 Callable),您可以为 Interface1 编写一个 Interface2 适配器:

class Interface1I2Adapter implements Interface2 {
Interface1 i1;
public Interface1I2Adapter (Interface1 i1) {
this.i1 = i1;
}
// impl of Interface2 methods by delegating to i1
}

然后你就可以使用

c.call2(new Interface1I2Adapter(i));

类似的东西。

如果没有有关您的设计的更多信息,就不可能建议什么是适合您的正确方法。以下是一些在很多情况下都有效的建议。

关于java - 如何将一种类型(接口(interface))的对象转换为另一种类型(接口(interface))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24007839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com