首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

尝试在Java8中使用Map<类、Function<T、R>>作为instanceOf的替代,无法放入映射

在Java 8中,我们可以使用Map<Class<? extends T>, Function<T, R>>来实现instanceOf的替代。该Map存储了类型Class和对应的Function函数,其中T代表要判断的对象类型,R代表处理该对象类型的返回结果类型。

以下是一种实现方式:

代码语言:txt
复制
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

public class InstanceOfMapper<T, R> {
    private Map<Class<? extends T>, Function<T, R>> typeMap;

    public InstanceOfMapper() {
        typeMap = new HashMap<>();
    }

    public void addMapping(Class<? extends T> clazz, Function<T, R> function) {
        typeMap.put(clazz, function);
    }

    public R apply(T obj) {
        for (Class<?> clazz : typeMap.keySet()) {
            if (clazz.isInstance(obj)) {
                return typeMap.get(clazz).apply(obj);
            }
        }
        // 没有匹配的类型
        return null;
    }
}

使用示例:

代码语言:txt
复制
public class Main {
    public static void main(String[] args) {
        InstanceOfMapper<Number, String> mapper = new InstanceOfMapper<>();

        // 添加类型和对应的处理函数
        mapper.addMapping(Integer.class, num -> "整数:" + num.intValue());
        mapper.addMapping(Double.class, num -> "浮点数:" + num.doubleValue());
        mapper.addMapping(Long.class, num -> "长整数:" + num.longValue());
        mapper.addMapping(Byte.class, num -> "字节:" + num.byteValue());

        // 测试不同类型的对象
        Number num1 = 100;
        Number num2 = 3.14;
        Number num3 = 9999999999L;
        Number num4 = (byte) 8;

        System.out.println(mapper.apply(num1));
        System.out.println(mapper.apply(num2));
        System.out.println(mapper.apply(num3));
        System.out.println(mapper.apply(num4));
    }
}

输出结果:

代码语言:txt
复制
整数:100
浮点数:3.14
长整数:9999999999
字节:8

在这个例子中,我们使用InstanceOfMapper类来替代Java中的instanceOf关键字。我们通过addMapping方法添加了不同类型的Class对象和对应的处理函数,然后通过apply方法来判断对象的类型,并根据类型调用相应的处理函数进行处理。

请注意,该实现方式是基于Java 8的Lambda表达式和函数式接口实现的。如果你需要在Java 7或更低版本中使用,可能需要做一些相应的调整。此外,这只是一个简单的示例,你可以根据实际需求进行扩展和改进。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

领券