在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 如何在接口實現(xiàn)類的方法中,獲取在該方法所屬的接口中定義的常量;

如何在接口實現(xiàn)類的方法中,獲取在該方法所屬的接口中定義的常量;

如何在接口實現(xiàn)類的方法中,獲取在該方法所屬的接口中定義的常量;

public interface RequireValidator {
    Integer errno = 456;
    Boolean required();
}

public interface TypeValidator {
    Integer errno = 123;
    Boolean isInteger();
}

public class Validator implements RequireValidator, TypeValidator  {
    @Override
    public Boolean require() {
        // 此處如何獲取456
        return null;
    }

    @Override
    public String isInteger() {
        // 此處如何獲取123;
        return null;
    }
}

如上,如何在注釋處獲取對應(yīng)的值?求大神解答?。?!

我的思路如下:

  1. 獲取類實現(xiàn)的所有的接口;
  2. 遍歷接口列表,查找定義了該方法的接口;
  3. 然后通過確定了的接口直接訪問errno;

這樣的問題是如何判斷接口是否定義了當前方法?

有更好的實現(xiàn)方法請指出,本人小白,求幫助?。?!

回答
編輯回答
懷中人

舉個例子。。。

public boolean required() {
    Class clazz = this.getClass();
    String currentMethod = Thread.currentThread().getStackTrace()[1].getMethodName();
    Class[] paramTypes = new Class[0];
    String fieldName = "errno";
    for (Class c : clazz.getInterfaces()) {
        try {
            c.getMethod(currentMethod, paramTypes);
            System.out.println(c.getField(fieldName).get(c));
        } catch (NoSuchMethodException | NoSuchFieldException | IllegalAccessException e) {
        }
    }
    return false;
}

雖然不知道你為什么要這么麻煩。。。直接 接口名.變量名 不好嗎

2017年12月13日 09:47
編輯回答
礙你眼

可以先嘗試一下你的方法,使用

String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();

在方法內(nèi)部獲得當前方法的名稱。

2018年4月30日 02:41
編輯回答
冷咖啡

謝謝大神,主要是怕后續(xù)接口名啊,還有方法的劃分啊之類的存在變更,這樣就不用去在實現(xiàn)里修改了

2018年3月5日 10:46