任务是将删除线应用于所选文本区域中的当前字体.难点在于Outlook不支持动态记录宏 - 它希望手动编写代码.
例如,以下简单代码:
Selection.Font.Strikethrough = True
Run Code Online (Sandbox Code Playgroud)
适用于Word,但为Outlook提供错误:
Run-time error '424':
Object required
Run Code Online (Sandbox Code Playgroud) 我想只保留包含带注释方法的类@Keep,以及这些方法.即使它们未使用,也应保留这些方法(和拥有类).
我在.pro文件中写的是:
-keepclassmembers class * {
@Keep *;
}
-keepclasseswithmembers class * {
@Keep *;
}
Run Code Online (Sandbox Code Playgroud)
但如果它们未被使用,它会使用@Keep方法缩小类.
然后我试试这个:
-keep class * {
@Keep *;
}
Run Code Online (Sandbox Code Playgroud)
它只保留所有课程.
那么,我应该在.pro文件中写什么?
更新1:示例 感谢您的回答.但我已经使用了完全限定的注释名称并包含带注释的JAR,但它并没有按照我的意愿行事.所以,我准备了一个样本.
我有2个JAR:
example.jar /
example/
code/
more/
A.class
Run Code Online (Sandbox Code Playgroud)
lib.jar /
example/
lib/
Keep.class
Run Code Online (Sandbox Code Playgroud)
A.java:
package example.code.more;
import example.lib.*;
public class A {
@Keep
void foo() {}
}
Run Code Online (Sandbox Code Playgroud)
Keep.java:
package example.lib;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.CLASS)
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface Keep {
}
Run Code Online (Sandbox Code Playgroud)
Proguard配置, …
我正在将一个WEB应用程序迁移到Spring Security.应用程序使用Spring MVC来呈现JSP,并使用注释控制器方法@Secured(...).
因此,在成功登录和MVC servlet初始化之后的某个时刻,一些Spring内部有这些信息:用户具有哪些权限(也称为授权权限),控制器URL和权限集,每个权限都需要.
我想要的是动态获取当前用户可访问的URL列表以生成导航栏.
当然,我可以为此覆盖一些Spring bean,但这种方法看起来太脏了.那么,关于如何做到这一点的任何建议,也许是标准解决方案?
问题是:我应该Activity.findViewById只在UI线程中调用吗?
我问的原因是我从任意线程调用它并且它完美无缺.但后来我从其中一个用户那里得到了一个例外:findViewById在NPE某个地方失败了findViewTraversal.
那么,它可能是原因吗?
这是代码片段:
class MyClass {
private native void foo();
}
Run Code Online (Sandbox Code Playgroud)
对于上述情况,Eclipse(即3.7.0)发出警告
来自MyClass类型的方法foo()从不在本地使用
好吧,但是当我试图压制警告时:
class MyClass {
@SuppressWarnings("unused")
private native void foo();
}
Run Code Online (Sandbox Code Playgroud)
它抱怨
不受欢迎的@SuppressWarnings("未使用")
那么,有没有办法让它停止抱怨?
更新
很抱歉信息不完整 - 此警告仅显示在AspectJ项目中.一旦我创建了一个简单的Java项目并将我的类放入其中,一切正常.
据我所知,AspectJ使用自己的编译器,因此必须由它生成此警告.我正在使用AspectJ Development Tools插件:
Version: 2.1.3.e37x-20110628-1900
AspectJ version: 1.6.12.20110613132200
Run Code Online (Sandbox Code Playgroud) 比方说,我有一个Java类一个,这需要一个辅助类乙.该助手类仅用于A,没有其他用途.此外,B不需要以任何方式使用A(不要调用方法或访问字段).
所以,问题是:在哪里放B?
有以下选项:
静态嵌套类.在我看来,它只是使代码不那么清晰(更多的缩进等).
public class A {
...
private static class B { ... }
}
Run Code Online (Sandbox Code Playgroud)同一来源的非公开课.我喜欢这个选项.
public class A {
...
}
class B {
...
}
Run Code Online (Sandbox Code Playgroud)非公开类在单独的来源中.看起来这个选项有一点开销.
// A.java
public class A {
...
}
// B.java
class B {
...
}
Run Code Online (Sandbox Code Playgroud)现在,我更喜欢第二种选择.你对此有什么想法?什么是最佳做法?它有权威来源吗?
我正在用Java编写一个简单的计时器.它有"开始"和"停止"按钮,以及显示自计时器启动以来经过了多长时间的文本视图.
它是通过System.currentTimeMillis()在循环中每秒设置初始时间和更新当前值来实现的.
问题是如果我在计时器运行时更改系统时间,整个测量将失败.例如,如果我将时间设置为一个月,则计时器显示负值,因为currentTimeMillis()现在返回的值小于初始值.
那么,我如何计算与系统时间无关的时间增量?使这个解决方案跨平台也很棒.
假设,在调试会话中,我有一个地址,不幸的是它指向一些垃圾.我想检查周围的记忆,看看附近有什么.正如所料,发生以下错误:
(gdb) x/64 $t5
0x842da7ac: Cannot access memory at address 0x842da7ac
Run Code Online (Sandbox Code Playgroud)
所以,问题是:有没有办法读取一系列地址,其中一些无效?
(更准确地说,我怎么知道上面的例子$t5+n中某些人的有效地址0 < n <= 64?)
我有通用的方法Foo.foo():
class Foo {
static native T <T> foo();
}
Bar bar = Foo.foo();
Run Code Online (Sandbox Code Playgroud)
我需要的是使用AspectJ替换对此方法的调用.问题是要从方面返回类型T的值,我需要知道T是什么.我如何使用AspectJ做到这一点?
这是我尝试过的一个解决方案:
Object around() : call(* Foo.foo(..)) {
Class target = ((MethodSignature) thisJoinPoint.getSignature()).getReturnType();
System.out.println("class = " + class);
}
Run Code Online (Sandbox Code Playgroud)
它Object作为返回类型返回.如何确定该调用foo()应该实际返回实例Bar?
java ×7
aspectj ×2
android ×1
assembly ×1
coding-style ×1
debugging ×1
eclipse ×1
gdb ×1
memory ×1
obfuscation ×1
outlook ×1
outlook-vba ×1
proguard ×1
spring ×1
spring-mvc ×1
time ×1
vba ×1