返回规范(Result)

1. 先上例子:

public ResultData getcarForceInsInformation(String InsId){
    ResultData resultData=new ResultData();
    List date= insuranceRepository.getcarForceInsInformation(InsId);
   if(date!=null){
       resultData.setMessage("查询成功");
       resultData.setResult("true");
       resultData.setPageData(new PageData(date,date.size()));
   }
   else{
       resultData.setMessage("系统错误,查询失败");
       resultData.setResult("false");
   }

    return  resultData;
}
  2. ResultData 是   包含: 返回结果 result,返回数据 PageData , 返回信息 message

public class ResultData {

    // 错误状态码 比如 "00", "01", "02"
    private String result;
    // 错误中文描述 比如 "正常""日期格式不正确" "缺少permit参数"
    private String message;
    // 返回数据
    private PageData pageData;

    public ResultData() {
    }

    public ResultData(String result, String message, PageData pageData) {
        this.result = result;
        this.message = message;
        this.pageData = pageData;
    }

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public PageData getPageData() {
        return pageData;
    }

    public void setPageData(PageData pageData) {
        this.pageData = pageData;
    }
}
3. pageData: 是 包含分页的信息

public class PageData<T> {

    private int total;
    private List<T> data;

    public PageData(List<T> data, int total) {
        this.total = total;
        this.data = data;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public List<T> getData() {
        return data;
    }

    public void setData(List<T> data) {
        this.data = data;
    }
}
4. 获得 pagedata 的底层方法: 在一个抽象类

package com.iris.live.services.data.repositories.impl;

import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.iris.live.services.models.PageData;
import org.hibernate.SQLQuery;
import org.hibernate.jpa.HibernateQuery;
import org.hibernate.transform.Transformers;
import org.hibernate.type.Type;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;

/**
 * Created by sxy on 2016/7/28.
 */
public abstract class BaseRepository {

    @PersistenceContext
    protected EntityManager entities;

    protected <T> T getScalar(String sql, Class<T> clazz) {
        return this.getScalar(sql, Maps.newHashMap(), clazz);
    }

    protected <T> T getScalar(String sql, Map params, Class<T> clazz) {
        List list = this.getList(sql, params);
        if (list.size() == 0) {
            return null;
        }

        Map first = (Map) Iterables.get(list, 0);
        if (first.entrySet().size() == 0) {
            return null;
        }

        Map.Entry entry = (Map.Entry) Iterables.get(first.entrySet(), 0);
        return (T) entry.getValue();
    }

    protected List getList(String sqlStr) {
        return this.getList(sqlStr, Maps.newHashMap());
    }

    protected List getList(String sqlStr, Map params) {
        Query query = this.entities.createNativeQuery(sqlStr);
        if (params != null) {
            for (Object key : params.keySet()) {
                query.setParameter((String) key, params.get(key));
            }
        }

        return this.toMap(query);
    }

    protected int getCount(String sqlStr) {
        return this.getCount(sqlStr, Maps.newHashMap());
    }

    protected int getCount(String sqlStr, Map params) {
        Query query = this.entities.createNativeQuery(sqlStr);
        if (params != null) {
            for (Object key : params.keySet()) {
                query.setParameter((String) key, params.get(key));
            }
        }

        BigInteger result = (BigInteger) query.getSingleResult();
        return result.intValueExact();
    }

    protected PageData getPage(String sqlStr, int pageSize, int pageIndex) {
        return this.getPage(sqlStr, Maps.newHashMap(), pageSize, pageIndex);
    }

    protected PageData getPage(String sqlStr, Map params, int pageSize, int pageIndex) {
        List data = null;
        if (pageSize == 0 && pageIndex == 0){
            data = this.getList(sqlStr,params);
        }else{
            data = this.getList(String.format("%s limit %d, %d", sqlStr, pageIndex * pageSize, pageSize), params);
        }
        int total = this.getCount(String.format("select cast(count(1) as UNSIGNED) rows from (%s) as q", sqlStr), params);
        return new PageData(data, total);
    }

    private List toMap(Query query) {
        if (query instanceof HibernateQuery) {
            query.unwrap(HibernateQuery.class)
                    .getHibernateQuery()
                    .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
            return query.getResultList();
        }

        throw new IllegalStateException();
    }

    private void addScalar(Query query, String column, Type type) {
        if (query instanceof HibernateQuery) {
            query.unwrap(SQLQuery.class).addScalar(column, type);
        }

        throw new IllegalStateException();
    }
}

6.每个 model对应的 

       Amodel----Aservice---AserviceImpl-------  AmodelRespotory------AmodelRespotoryImpl-----baserespotory


service层: 是接口 里面 有 静态的类(要分页 需要继承 requestBase) +方法
public interface AfterMarketService {

serviceImpl层: 实现接口,注意有 上标+事务提交+主动注入
@Service
@Transactional//(readOnly = true)
public class AfterMarketServiceImpl implements AfterMarketService {

    @Autowired
    private AfterMarketRepository repository;

dao层: 接口正规的
@NoRepositoryBean
public interface AccountRepository {
  jpa版本的 可以实现简单的 crud
public interface AttachmentPolicyRepository extends JpaRepository<AttachmentPolicyModel, Integer>, JpaSpecificationExecutor<AttachmentPolicyModel> {

daoimpl层: 实现正规的 接口 和继承 底层的 baserespotory
@Repository
@Transactional//(readOnly = true)
public class AccountRepositoryImpl extends BaseRepository implements AccountRepository


 
public abstract class BaseRepository {


<think>好的,我现在需要解决用户关于在switch case结构中无法正确返回result的问题。用户提到的编程语言没有明确说明,但根据引用的资料,引用了Java和C/C++的例子,所以我可能需要考虑这两种语言的情况。 首先,用户的问题是无法正确返回result,可能的原因有哪些呢?常见的switch case问题包括忘记写break导致case穿透,或者返回值的方式不正确。比如在C/C++中,如果在case里直接赋值而没有break,后面的case会继续执行,导致结果错误。而Java在较新版本中支持switch表达式,可以直接返回值,但语法可能需要注意。 查看用户提供的引用,引用[1]提到Java中使用增强的switch表达式可以返回值,例如int result = switch(number){case 1->10; ...};这说明在Java中可以通过箭头语法直接返回,不需要break。而引用[2]和[4]提到,当匹配到case后,如果没有break,会继续执行后续case的语句,这可能导致错误。引用[5]指出如果case的值重复,编译器会报错,这也是一个可能的问题点。 所以,可能的问题原因有几个:1. 缺少break语句导致穿透;2. 返回值的方式不正确,比如在Java中没有使用正确的表达式语法;3. case的值重复;4. 没有处理默认情况(default)。 接下来,需要根据不同的编程语言给出解决方法。比如在C/C++中,每个case后必须加break,否则会继续执行下一个case。而Java中,如果使用传统switch语句,同样需要break,但如果是使用增强的switch表达式,则可以用箭头语法直接返回值,不需要break。 用户的问题可能是没有正确处理这些情况。比如在传统写法中,用户可能在case里给result赋值,但未加break,导致其他case也被执行,最终result被覆盖。或者在Java中想要返回值,却使用了语句而非表达式形式,导致返回值失败。 解决方案应分语言说明。例如,在C/C++中确保每个case后有break,或者使用return语句直接返回。在Java中,可以使用增强的switch表达式,或者确保每个case有break,并在最后返回result。同时,必须包含default情况处理意外值。 此外,用户的问题可能涉及变量作用域。比如在C/C++中,如果在case内声明变量可能导致问题,需要作用域正确。或者在所有case之前初始化result,避免未赋值的情况。 总结可能的解决步骤:1. 检查是否每个case都有break;2. 确保使用正确的switch语法(表达式或语句);3. 处理所有可能的情况,包括default;4. 检查变量作用域和初始化。 最后,需要验证给出的示例代码是否正确,比如Java中的switch表达式是否正确使用箭头语法和yield,或者传统写法中的break是否正确放置。C/C++的例子需要展示break的使用,或者使用return来避免穿透。</think>在 `switch-case` 结构中正确返回 `result` 的关键在于**语法规范**和**逻辑控制**。以下是常见编程语言(如 Java、C/C++)的解决方案及注意事项: --- ### **1. 确保每个 case 分支正确终止** - **问题**:如果 `case` 未用 `break` 终止,会继续执行后续分支(称为“穿透”),导致返回值错误[^2][^4]。 - **解决方法**: - **C/C++**:每个 `case` 末尾必须添加 `break` 或直接返回结果。 - **Java**:传统 `switch` 语句需要 `break`;增强型 `switch` 表达式(Java 14+)可用 `->` 箭头语法自动终止。 **示例(Java 传统写法)**: ```java int result; switch (number) { case 1: result = 10; break; // 必须显式终止 case 2: result = 20; break; default: result = 30; break; } return result; ``` **示例(Java 增强型表达式)**: ```java int result = switch (number) { case 1 -> 10; // 自动终止,无需 break case 2 -> 20; default -> 30; }; // 分号结尾 ``` --- ### **2. 覆盖所有可能情况** - **问题**:未处理 `default` 分支可能导致未初始化变量或逻辑错误[^5]。 - **解决方法**: - 始终添加 `default` 分支,处理意外值。 - 若变量在 `switch` 外定义,需在所有分支中赋值。 **示例(C/C++)**: ```cpp int result; switch (var) { case 1: result = 10; break; case 2: result = 20; break; default: // 必须处理默认情况 result = 30; break; } return result; ``` --- ### **3. 避免重复的 case 标签** - **问题**:多个 `case` 标签重复会导致编译错误。 - **解决方法**: - 检查所有 `case` 值是否唯一。 --- ### **4. 直接返回结果(简化写法)** - 若函数需要返回结果,可直接在每个分支使用 `return`,无需额外变量。 **示例(C/C++)**: ```cpp int getResult(int var) { switch (var) { case 1: return 10; // 直接返回,无需 break case 2: return 20; default: return 30; } } ``` --- ### **总结** - **C/C++**:优先使用 `break` 或直接 `return`,确保变量初始化。 - **Java**:推荐增强型 `switch` 表达式(`->` 语法),避免传统 `switch` 的穿透问题[^1]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值