gpt4 book ai didi

java - 我可以知道给定的方法是否存在吗?

转载 作者:行者123 更新时间:2023-12-01 22:29:44 25 4
gpt4 key购买 nike

我想知道在 Java 中是否不仅可以检查 instanceof,还可以检查给定方法是否可用于泛型类型变量。

new LruCache<K, V>(size) {
@Override
protected int sizeOf(final K key, final V value) {
// if (value hasmethod getByteCount)
return super.sizeOf(key, value);
}
};

存在吗?

最佳答案

更好的解决方案是将 V 限制为具有该方法的接口(interface)。但如果你做不到:

boolean hasMethod = false;
try {
Method m = value.getClass().getDeclaredMethod("byteCount", null);
hasMethod = true;
}
catch (NoSuchMethodException e) {
}
catch (SecurityException e) {
// you don't have access to the method from your package
}

假设该方法没有参数。否则,将参数类型作为参数传递到 getDeclaredMethod 中。

如果方法是公共(public)的,请改用getMethod

编辑评论正确地指出这不会从父类(super class)型获取方法。如果您需要,可以使用它(它会跳过 Object 方法,因为所有对象都有这些方法,因此对继承的这些方法之一进行测试是没有值(value)的):

<V> boolean hasInheritedDeclaredMethod(V value, String methodName)
{
Class c = value.getClass();
boolean hasMethod = false;
while (!hasMethod && c != Object.class) {
try {
Method m = c.getDeclaredMethod(methodName, null);
hasMethod = true;
}
catch (NoSuchMethodException e) { }
// you don't have access to the method from your package
catch (SecurityException e) { break; }
if (!hasMethod && c != Object.class)
c = c.getSuperclass();
}
return hasMethod;
}

关于java - 我可以知道给定的方法是否存在吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28069121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com