- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 WifiScanning 类:
public class WifiScanning extends AbstractSetting {
/**
*
*/
private static final long serialVersionUID = 226897434530036069L;
public WifiScanning(Object valueToApply) {
super(valueToApply, WifiScanning.class);
}
/**
* For persistence only
*/
public WifiScanning() {
super(null, WifiScanning.class);
}
如您所见,它有 2 个构造函数。一个用于我的简单持久层并且是一个空的构造函数,因此 newInstance() 可以工作,另一个采用单个参数,这是我的应用程序定义的标准。其他代码假定必须有一个带有单个参数的构造函数,否则它会抛出异常。
/**
*
* @param setting
* @param ctx
* @return
* @throws SettingException
*/
private synchronized static AbstractSetting getOriginalSetting(AbstractSetting setting,
Context ctx) throws SettingException {
Class<? extends AbstractSetting> clazz = setting.getClass();
try {
Constructor<?>[] constructors = clazz.getDeclaredConstructors();
for (Constructor<?> c : constructors) {
if(c.getParameterTypes().length == 1) {
Object original = setting.getCurrentSettingValue(ctx);
LOG.debug("Caching original value '"+original+"' for "+clazz.getSimpleName());
return (AbstractSetting) c.newInstance(original);
}
}
/*
* ###################### DEBUG BLOCK ######################
*
* This has been put here to work out why we are getting to this point in the code when
* using WifiScanning.java
*/
LOG.error("There are "+constructors.length+" constructors for "+clazz.getName()+" which we got from "+setting);
for (Constructor<?> c : constructors) {
if(c.getParameterTypes().length == 1) {
LOG.debug("Found the consructor! How the hell can that be?");
}
else {
LOG.error("Unusable constructor: "+c.toGenericString());
LOG.error("From: "+c.getDeclaringClass());
LOG.error("Modifiers:");
LOG.error("private="+Modifier.isPrivate(c.getModifiers()));
LOG.error("protected="+Modifier.isProtected(c.getModifiers()));
LOG.error("public="+Modifier.isPublic(c.getModifiers()));
LOG.error("static="+Modifier.isStatic(c.getModifiers()));
Type[] genericParameterTypes = c.getGenericParameterTypes();
LOG.error("Constructor has "+genericParameterTypes.length+" generic parameter types");
for (Type type : genericParameterTypes) {
LOG.error("Generic parameter type: "+type.getClass().getName());
}
Class<?>[] parameterTypes = c.getParameterTypes();
LOG.error("Constructor has "+parameterTypes.length+" parameters");
for (Class<?> arg1 : parameterTypes) {
LOG.error("Constructor arg: "+arg1.getName());
}
}
}
/*
* ###################### END DEBUG BLOCK ######################
*/
throw new SettingException(clazz+" does not have a constructor with a single argument");
如果您考虑上面的代码,就会添加 DEBUG BLOCK 以尝试理解这里发生的事情。如果你暂时忽略它,你得到的是一段代码,它从代码中获取一组构造函数并迭代它们,寻找具有单个参数的构造函数。如果循环没有找到一个就退出了,就会抛出一个异常。
添加异常 block 后,日志显示:
E/Proference: 10/7 22:28:59.917 e.b[126]: There are 1 constructors for com.domloge.proference.setting.WifiScanning which we got from WifiScanning "Test" [set:true|current:false|priority:1] E/Proference: 10/7 22:28:59.917 e.b[132]: Unusable constructor: public com.domloge.proference.setting.WifiScanning() V/Proference: Purging log file E/Proference: 10/7 22:28:59.918 e.b[133]: From: class com.domloge.proference.setting.WifiScanning E/Proference: 10/7 22:28:59.919 e.b[134]: Modifiers: E/Proference: 10/7 22:28:59.919 e.b[135]: private=false E/Proference: 10/7 22:28:59.920 e.b[136]: protected=false E/Proference: 10/7 22:28:59.920 e.b[137]: public=true E/Proference: 10/7 22:28:59.920 e.b[138]: static=false E/Proference: 10/7 22:28:59.921 e.b[141]: Constructor has 0 generic parameter types E/Proference: 10/7 22:28:59.921 e.b[147]: Constructor has 0 parameters E/Proference: 10/7 22:28:59.922 j.b[270]: Could not apply
如您所见,VM 显示 WifiScanning 类正在提供一个构造函数,而不是 2 个。这怎么可能?
当我在我的个人设备和各种模拟器上运行代码时,这不是问题,数组中有 2 个构造函数。
问题是,当应用程序通过 Google Play 商店分发时,该数组包含一个构造函数。当我的应用程序发布到 Google Play 商店时,我无法对其进行调试,我只能查看日志。
这个 principal 在应用程序中的 10 多个其他类中工作得很好......但是这个正在发挥作用......就好像我遗漏了一个错字,这将是一个前额拍打 d '哦!当有人指出我的愚蠢错误时......
有什么想法吗?
最佳答案
没错,明明就是proguard“michief”。
将以下行放入 proguard-project.txt
-keepclassmembers class * extends full-package-name.AbstractSetting {
public protected <init>(...);
}
一切都会好起来的。
关于java - Android clazz.getConstructors() 返回错误数量的构造函数,仅在实时应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25234128/
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
在编码时,我问了自己这个问题: 这样更快吗: if(false) return true; else return false; 比这个? if(false) return true; return
如何在逻辑条件下进行“返回”? 在这样的情况下这会很有用 checkConfig() || return false; var iNeedThis=doSomething() || return fa
这是我的正则表达式 demo 如问题所述: 如果第一个数字是 1 则返回 1 但如果是 145 则返回 145 但如果是 133 则返回 133 样本数据a: K'8134567 K'81345678
在代码高尔夫问答部分查看谜题和答案时,我遇到了 this solution返回 1 的最长和最晦涩的方法 引用答案, int foo(void) { return! 0; } int bar(
我想在下面返回 JSON。 { "name": "jackie" } postman 给我错误。说明 Unexpected 'n' 这里是 Spring Boot 的新手。 1日龄。有没有正确的方法来
只要“is”返回 True,“==”不应该返回 True 吗? In [101]: np.NAN is np.nan is np.NaN Out[101]: True In [102]: np.NAN
我需要获取所有在 6 号或 7 号房间或根本不在任何房间的学生的详细信息。如果他们在其他房间,简单地说,我不希望有那个记录。 我的架构是: students(roll_no, name,class,.
我有一个表单,我将它发送到 php 以通过 ajax 插入到 mysql 数据库中。一切顺利,php 返回 "true" 值,但在 ajax 中它显示 false 消息。 在这里你可以查看php代码:
我在 Kotlin 中遇到了一个非常奇怪的无法解释的值比较问题,以下代码打印 假 data class Foo ( val a: Byte ) fun main() { val NUM
请注意,这并非特定于 Protractor。问题在于 Angular 2 的内置 Testability service Protractor 碰巧使用。 Protractor 调用 Testabil
在调试窗口中,以下表达式均返回 1。 Application.WorksheetFunction.CountA(Cells(4 + (i - 1) * rows_per_record, 28) & "
我在本地使用 jsonplaceholder ( http://jsonplaceholder.typicode.com/)。我正在通过 extjs rest 代理测试我的 GET 和 POST 调用
这是 Postman 为成功调用我的页面而提供的(修改后的)代码段。 var client = new RestClient("http://sub.example.com/wp-json/wp/v2
这个问题在这里已经有了答案: What to do with mysqli problems? Errors like mysqli_fetch_array(): Argument #1 must
我想我对 C 命令行参数有点生疏。我查看了我的一些旧代码,但无论这个版本是什么,都会出现段错误。 运行方式是 ./foo -n num(其中 num 是用户在命令行中输入的数字) 但不知何故它不起作用
我已经编写了一个类来处理命名管道连接,如果我创建了一个实例,关闭它,然后尝试创建另一个实例,调用 CreateFile() 返回 INVALID_HANDLE_VALUE,并且 GetLastErro
即使 is_writable() 返回 true,我也无法写入文件。当然,该文件存在并且显然是可读的。这是代码: $file = "data"; echo file_get_contents($fil
下面代码中的变量 $response 为 NULL,尽管它应该是 SOAP 请求的值。 (潮汐列表)。当我调用 $client->__getLastResponse() 时,我从 SOAP 服务获得了
我一直在网上的不同论坛上搜索答案,但似乎没有与我的情况相符的... 我正在使用 Windows 7,VS2010。 我有一个使用定时器来调用任务栏刷新功能的应用程序。在该任务栏函数中包含对 LoadI
我是一名优秀的程序员,十分优秀!