Generic Interfaces

本文介绍了一个使用Java泛型实现的最小最大值比较器。该比较器能够对任意实现了Comparable接口的数据类型进行最小值和最大值的计算。通过具体实例展示了如何对整数和字符数组进行操作,并返回各自的最小值和最大值。
interface MinMax<T extends Comparable<T>> {
  T min();

  T max();
}

class MyClass<T extends Comparable<T>> implements MinMax<T> {
  T[] vals;

  MyClass(T[] o) {
    vals = o;
  }

  public T min() {
    T v = vals[0];

    for (int i = 1; i < vals.length; i++)
      if (vals[i].compareTo(v) < 0)
        v = vals[i];

    return v;
  }

  public T max() {
    T v = vals[0];

    for (int i = 1; i < vals.length; i++)
      if (vals[i].compareTo(v) > 0)
        v = vals[i];

    return v;
  }
}

public class MainClass {
  public static void main(String args[]) {
    Integer inums[] = { 3, 6, 2, 8, 6 };
    Character chs[] = { 'A', 'r', 'V', 'w' };

    MyClass<Integer> iob = new MyClass<Integer>(inums);
    MyClass<Character> cob = new MyClass<Character>(chs);

    System.out.println("Max value in inums: " + iob.max());
    System.out.println("Min value in inums: " + iob.min());

    System.out.println("Max value in chs: " + cob.max());
    System.out.println("Min value in chs: " + cob.min());
  }
}
Max value in inums: 8
Min value in inums: 2
Max value in chs: w
Min value in chs: A

  

转载于:https://www.cnblogs.com/hephec/p/4605882.html

package com.kucun.Service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import java.lang.reflect.ParameterizedType; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @Service public class DynamicRepositoryService { @Autowired private ApplicationContext applicationContext; // 存储实体名称(小写)到Repository的映射 private final Map<String, JpaRepository<?, ?>> repositoryMap = new HashMap<>(); // 存储实体类到Repository的映射 private final Map<Class<?>, JpaRepository<?, ?>> classRepositoryMap = new HashMap<>(); public Map<Class<?>, JpaRepository<?, ?>> getClassRepositoryMap() { return classRepositoryMap; } public DynamicRepositoryService() { super(); } /** * 初始化方法:扫描所有JpaRepository并建立映射 */ @PostConstruct public void init() { // 获取所有JpaRepository的实现 Map<String, JpaRepository> repositories = applicationContext.getBeansOfType(JpaRepository.class); repositories.forEach((beanName, repo) -> { // 通过反射获取Repository管理的实体类型 Class<?> entityClass = resolveEntityClass(repo); if (entityClass != null) { // 建立映射:实体类名(小写)-> Repository repositoryMap.put(entityClass.getSimpleName().toLowerCase(), repo); // 建立映射:实体类-> Repository classRepositoryMap.put(entityClass, repo); } }); } /** * 解析Repository管理的实体类 * @param repository JpaRepository实例 * @return 管理的实体类 */ private Class<?> resolveEntityClass(JpaRepository<?, ?> repository) { // 获取Repository接口的泛型参数 return Arrays.stream(repository.getClass().getGenericInterfaces()) .filter(genericInterface -> genericInterface.getTypeName().contains("JpaRepository")) .findFirst() .map(ParameterizedType.class::cast) .map(type -> (Class<?>) type.getActualTypeArguments()[0]) .orElse(null); } /** * 根据实体名称获取Repository * @param entityName 实体名称(小写) * @return 对应的JpaRepository */ public JpaRepository<?, ?> getJpaRepository(String entityName) { JpaRepository<?, ?> repo = repositoryMap.get(entityName.toLowerCase()); if (repo == null) { throw new IllegalArgumentException("未找到实体 " + entityName + " 对应的Repository"); } return repo; } /** * 根据实体类获取Repository * @param entityClass 实体类 * @return 对应的JpaRepository */ public JpaRepository<?, ?> getJpaRepository(Class<?> entityClass) { JpaRepository<?, ?> repo = classRepositoryMap.get(entityClass); if (repo == null) { throw new IllegalArgumentException("未找到实体类 " + entityClass.getName() + " 对应的Repository"); } return repo; } /** * 获取所有注册的Repository映射 * @return 实体名称到Repository的映射 */ public Map<String, JpaRepository<?, ?>> getRepositoryNameMap() { return repositoryMap; } } 运行时两个集合都是空的
06-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值