添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
痴情的铁板烧  ·  Resource ...·  1 月前    · 
坏坏的投影仪  ·  Center City District ...·  4 月前    · 
朝气蓬勃的饼干  ·  百度贴吧·  9 月前    · 
强健的四季豆  ·  130-一天学会perl | ...·  1 年前    · 

在 Java 中,如果一个接口有多个实现类,可以通过以下几种方式来调用不同的实现类:

  1. 根据具体实现类的类型进行调用:
InterfaceA objA = new ImplementationA();
InterfaceA objB = new ImplementationB();
objA.method(); // 调用 ImplementationA 的实现方法
objB.method(); // 调用 ImplementationB 的实现方法
  1. 利用接口的引用,根据条件判断调用不同的实现类:
InterfaceA obj;
if (condition) {
    obj = new ImplementationA();
} else {
    obj = new ImplementationB();
obj.method(); // 根据条件调用不同的实现类方法
  1. 在集合中存储不同的实现类对象,通过循环遍历调用:
List<InterfaceA> objects = new ArrayList<>();
objects.add(new ImplementationA());
objects.add(new ImplementationB());
for (InterfaceA obj : objects) {
    obj.method(); // 循环遍历调用不同实现类的方法
  1. 使用工厂模式或依赖注入框架来动态获取不同的实现类对象:
InterfaceA obj = ObjectFactory.getInstance().createInterfaceA();
obj.method(); // 动态获取实现类对象并调用方法

需要根据具体的应用场景和需求选择适合的方式来调用不同的实现类。在代码中,根据接口类型、条件判断、集合遍历或动态获取实例等方式,可以灵活地调用不同的实现类的方法。

,除了上述方案,还有以下一些方案可以实现在 Java 中调用多个实现类:

  1. 使用注解:通过为实现类添加特定的注解,在需要调用的地方通过注解扫描来获取实现类,并进行调用。
  2. 使用代理模式:通过动态代理机制,在运行时生成代理对象,并在代理对象中根据条件调用不同的实现类的方法。
  3. 使用配置文件:将不同实现类的信息配置在文件中,通过读取配置文件来获取实现类,并进行调用。
  4. 使用动态加载:使用 Java 的动态加载机制,根据类名或条件动态加载不同的实现类,并进行调用。

工厂模式得示例代码一

当涉及到工厂模式时,可以按照以下步骤实现:

创建接口:

public interface ProductService {
    void getProductInfo();

创建具体的实现类:

public class ProductAService implements ProductService {
    @Override
    public void getProductInfo() {
        System.out.println("Product A info");
public class ProductBService implements ProductService {
    @Override
    public void getProductInfo() {
        System.out.println("Product B info");

创建工厂类:

public class ProductServiceFactory {
    public static ProductService createProductService(String productType) {
        if (productType.equalsIgnoreCase("A")) {
            return new ProductAService();
        } else if (productType.equalsIgnoreCase("B")) {
            return new ProductBService();
        } else {
            throw new IllegalArgumentException("Invalid product type");

使用工厂类获取实例并调用方法:

public class Main {
    public static void main(String[] args) {
        ProductService productServiceA = ProductServiceFactory.createProductService("A");
        productServiceA.getProductInfo(); // 输出:Product A info
        ProductService productServiceB = ProductServiceFactory.createProductService("B");
        productServiceB.getProductInfo(); // 输出:Product B info

在上述示例中,通过工厂类的静态方法 createProductService 根据传入的参数(产品类型)动态创建具体的实现类对象。根据不同的产品类型,工厂类返回不同的实例,并通过接口引用调用对应的方法。这样可以在运行时决定具体使用哪个实现类,而无需在代码中直接创建对象。

工厂模式得示例代码(Map实现)二

通过 Map 来实现工厂模式是一种常见的方式,可以将不同的产品类型与对应的实现类进行映射。以下是使用 Map 实现工厂模式的示例代码:

创建接口:

public interface ProductService {
    void getProductInfo();

创建具体的实现类:

public class ProductAService implements ProductService {
    @Override
    public void getProductInfo() {
        System.out.println("Product A info");
public class ProductBService implements ProductService {
    @Override
    public void getProductInfo() {
        System.out.println("Product B info");

创建工厂类:

import java.util.HashMap;
import java.util.Map;
public class ProductServiceFactory {
    private static final Map<String, ProductService> productMap = new HashMap<>();
    static {
        productMap.put("A", new ProductAService());
        productMap.put("B", new ProductBService());
    public static ProductService createProductService(String productType) {
        ProductService productService = productMap.get(productType);
        if (productService == null) {
            throw new IllegalArgumentException("Invalid product type");
        return productService;

使用工厂类获取实例并调用方法:

public class Main {
    public static void main(String[] args) {
        ProductService productServiceA = ProductServiceFactory.createProductService("A");
        productServiceA.getProductInfo(); // 输出:Product A info
        ProductService productServiceB = ProductServiceFactory.createProductService("B");
        productServiceB.getProductInfo(); // 输出:Product B info

在这个示例中,工厂类通过一个静态的 Map 对象将产品类型与对应的实现类进行映射。在工厂类的 createProductService 方法中,根据传入的产品类型从 Map 中获取对应的实现类实例,并返回给调用方。这样,在运行时可以根据不同的产品类型获取对应的实例对象。

工厂模式得示例代码(注解实现)三

以下是一个使用注解实现多个实现类调用的示例代码:

定义注解:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyImplementation {
    String value();

创建接口:

public interface MyInterface {
    void doSomething();

创建具体的实现类,并使用注解标记:

@MyImplementation("A")
public class ImplementationA implements MyInterface {
    @Override
    public void doSomething() {
        System.out.println("Implementation A");
@MyImplementation("B")
public class ImplementationB implements MyInterface {
    @Override
    public void doSomething() {
        System.out.println("Implementation B");

创建工厂类,使用注解扫描获取对应实现类:

import java.util.HashMap;
import java.util.Map;
public class MyFactory {
    private static final Map<String, MyInterface> implementations = new HashMap<>();
    static {
        // 扫描带有@MyImplementation注解的类,并将其实例化并放入implementations Map中
        Reflections reflections = new Reflections("com.example");
        Set<Class<?>> annotatedClasses = reflections.getTypesAnnotatedWith(MyImplementation.class);
        for (Class<?> annotatedClass : annotatedClasses) {
            MyImplementation annotation = annotatedClass.getAnnotation(MyImplementation.class);
            String implementationKey = annotation.value();
            try {
                MyInterface implementation = (MyInterface) annotatedClass.newInstance();
                implementations.put(implementationKey, implementation);
            } catch (InstantiationException | IllegalAccessException e) {
                e.printStackTrace();
    public static MyInterface getImplementation(String key) {
        return implementations.get(key);

使用工厂类获取实例并调用方法:

public class Main {
    public static void main(String[] args) {
        MyInterface implementationA = MyFactory.getImplementation("A");
        implementationA.doSomething(); // 输出:Implementation A
        MyInterface implementationB = MyFactory.getImplementation("B");
        implementationB.doSomething(); // 输出:Implementation B

在这个示例中,通过自定义的注解 @MyImplementation 标记具体的实现类,然后使用反射扫描带有该注解的类,并实例化放入工厂类的 implementations Map 中。通过工厂类的 getImplementation 方法,根据指定的实现类标识符获取对应的实现类实例。然后就可以通过实例调用接口定义的方法

工厂模式得示例代码(枚举实现)四

枚举也可以用于实现工厂模式,其中每个枚举常量都代表一个具体的实现类。以下是一个使用枚举实现工厂模式的示例代码:

public interface MyInterface {
    void doSomething();
public class ImplementationA implements MyInterface {
    @Override
    public void doSomething() {
        System.out.println("Implementation A");
public class ImplementationB implements MyInterface {
    @Override
    public void doSomething() {
        System.out.println("Implementation B");
public enum MyFactory {
    IMPLEMENTATION_A {
        @Override
        public MyInterface create() {
            return new ImplementationA();
    IMPLEMENTATION_B {
        @Override
        public MyInterface create() {
            return new ImplementationB();
    public abstract MyInterface create();
public class Main {
    public static void main(String[] args) {
        MyInterface implementationA = MyFactory.IMPLEMENTATION_A.create();
        implementationA.doSomething(); // 输出:Implementation A
        MyInterface implementationB = MyFactory.IMPLEMENTATION_B.create();
        implementationB.doSomething(); // 输出:Implementation B

在这个示例中,枚举 MyFactory 表示工厂,每个枚举常量代表一个具体的实现类。每个枚举常量都实现了抽象方法 create(),该方法用于创建对应的实现类对象。在 Main 类中,通过枚举常量调用 create() 方法来创建具体的实现类对象,并调用接口方法

public interface TransCallbackInterface { public void callback(String taskId, int code, String fixed); @Component public class T...
一个接口多个实现类,如何指定特定实现类进行调用示例解决方法 在写程序的时候经常会遇到 写一个接口多个实现类,那么在调用的时候是如何去确定调用的是哪个实现类呢?接下来将为你介绍几种方式: public interface Animal { //动物的叫声 public void call(); //动物吃的东西 public void eat(); 实现类1 @Service("dogImpl") public class Dog implements An
一般我们用第二种方式有一个好处,如果以后要改动,那么只需要修改其引用的实例,改动较少! 举个例子:A接口,A1,A2,A3实现A接口,有一个eat方法,A1:吃饭,A2:吃鱼,A3:吃肉 需要得到"吃肉",那么 A a = n 接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及前),默认方法和静态方法(JDK 8),私有方法(JDK 9)。 接口的定义,它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型 引用数据类型:数组,类,接口接口的使用,它不能创建对象,但是可以被实现( implements ,类似于被继承) A用户调用Aservice实现类,B用户调用Bservice实现类 1、使用switch-case public static Person printPerson(int kind) { Person p = null; switch (kind) { case FIRST: p = new A(&quot;人1&quot;);break; case SECOND...
CSDN-Ada助手: 恭喜您写出了这篇关于使用redis和caffiene搭建二级缓存的博客!您的经验和知识对于我们这些学习者来说非常有用。接下来,建议您可以考虑分享一些具体的应用案例,帮助读者更好地理解如何在实际项目中应用这些技术。再次感谢您的分享,期待您更多的创作! CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3,我们会奖励持续创作和学习的博主,请看:https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply3