gpt4 book ai didi

java - 返回接口(interface)的方法? [鉴于接口(interface)有多种实现]

转载 作者:行者123 更新时间:2023-12-02 00:27:15 25 4
gpt4 key购买 nike

这个问题可能很简单(我希望不是),但我在采访中发现。一般来说,给定一个接口(interface)类 IntClass,以及许多实现名为 ImpIC1、ImpIC2、...、ImpICk 的接口(interface)的类。 IntClass 中的方法是名为 void action1()、void action2() ...、void actionM() 的抽象公共(public)方法。

我获得了一个公共(public)类 Test,其公共(public)静态函数名为:public static IntClass foo(IntClass c1, IntClass c2)。该方法对 c1 和 c2 进行一些操作以创建一个 InClass 并返回。 但是,该方法必须适用于 IntClass 的每个有效实现。问题主要出在c3的定义上。我将如何设计方法 foo() ..

请参阅下面的代码详细信息:

public interface IntClass { 
abstract void action1();
..
abstract void actionM();
}

..

 public class ImpIC1 implements IntClass { 
public void action1() { ... }
public void action2() { ....}
..
public void actionM() { ... }
}

...

 public class ImpIC2 implements IntClass { 
public void action1() { ... }
public void action2() { ....}
..
public void actionM() { ... }
}

...

 public class ImpICk implements IntClass { 
public void action1() { ... }
public void action2() { ....}
..
public void actionM() { ... }
}

...

public class Test { 
public static IntClass foo(IntClass c1, IntClass c2) {
....
...
return c3;
}
}

...

问题主要出在c3的定义上。我尝试了以下解决方案(均无效):

  1. 在 foo 内部,c3 被定义为 Object 的实例。即 IntClass c3 = (IntClass) new Object()。 -- 编译时错误 Object 无法转换为 IntClass
  2. 在 foo 内部,c3 没有初始化。 (编译时错误)。
  3. foo内部,c3为null,(空指针异常)
  4. 在 foo 内部,c3 被初始化为 c3 的实现之一(即 c3 = (IntClass) new ImpIC1()) .. 问题是,如果我们在外部执行 ImpIC2 s = (ImpIC1) foo(c1, c2) - 我们收到错误(无法转换)。

最佳答案

我不知道你的实现情况。但这里有一些我们需要知道的点。您不能实例化接口(interface)(匿名内部类除外)。如果您希望接口(interface)返回更改测试类,如下 -

     public class Test { 
public static IntClass foo(IntClass c1, IntClass c2,String className) {
....
...

IntClass c3 = Class.forName(className);
//Set properties of c3 as your logic.
return c3;

}}

关于java - 返回接口(interface)的方法? [鉴于接口(interface)有多种实现],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9756450/

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