我正在使用ScriptEngine,运行JavaScript.
我希望JavaScript脚本能够调用myFunction(),其中myFunction()是我的给定类中的方法.
我知道可以将importPackage用于标准Java的东西,我自己的方法呢?
请指教 :)
我似乎找不到会混淆局部变量的设置,在一个被混淆的类的方法内部.
这是我反编译的一个类的摘录,其中有一些明显缺失的部分.理想情况下,方法和局部变量的参数也会被混淆.
public class eA extends gu
{
private final gt a;
private final gt b;
public static boolean a(fy game)
{
boolean playerDead = game.k().j() <= 0;
boolean enemyDead = game.g().a().size <= 0;
boolean wavesRemain = game.r() > 0;
return (playerDead) || ((!wavesRemain) && (enemyDead));
}
public eA(gt gameState, gt boardState)
{
this.b = gameState;
this.a = boardState;
}
public void a()
{
n();
boolean playerDead = this.f.k().j() <= 0;
boolean enemyDead = this.f.g().a().size <= 0;
if (a(this.f)) { …Run Code Online (Sandbox Code Playgroud) 我正在编写一个例程来调用方法,这些方法由一个名称和一组参数Class值找到
通过getName匹配方法是有效的,但是当尝试匹配参数的给定Class []和Method.getParameterTypes()时,我遇到了麻烦.
我认为这样可行:
Class[] searchParams = new Class[] { float.class, String.class };
Class[] methodParams = m.getParameterTypes();
if(methodParams == searchParams) {
m.invoke(this, paramValues);
}
但显然不是 - 永远不会到达m.invoke.我已经检查了,methodParams提供了与searchParams相同的类.
下面的代码工作,并选择正确的方法,但它似乎是一种非常肮脏的做事方式,我敢肯定我错过了一些明显的东西.
Class[] searchParams = new Class[] { float.class, String.class };
Class[] methodParams = m.getParameterTypes();
boolean isMatch = true;
for(int i = 0; i < searchParams.length; i++) {
if(!searchParams.getClass().equals(methodParams.getClass())) {
isMatch = false;
}
}
if(isMatch) {
m.invoke(this, paramValues);
}
我的程序运行速度比我想要的慢.
我做了一些分析,我发现这个部分占用了绝大部分的处理时间
DO K = 0, K_MAX
WRITE(EIGENVALUES_IO, *) K * 0.001 * PI, (W_UP(J), J=1, ATOM_COUNT)
DCMPLXW_UP(:) = DCMPLX(W_UP(:))
DO E = 1, ENERGY_STEPS
ENERGY = MIN_ENERGY + ENERGY_STEP * REAL(E, DP)
ZV = DCMPLX(ENERGY, DELTA)
ON_SITE_SINGLE = DCMPLX(0.0_DP)
DO Q = 1, ATOM_COUNT
DO J = 1, ATOM_COUNT
ON_SITE_SINGLE(J) = ON_SITE_SINGLE(J) + (MATRIX_UP(J, Q) * MATRIX_UP_CONJG(J, Q)) / (ZV - DCMPLXW_UP(Q))
END DO
END DO
DOS_DOWN(E) = DOS_DOWN(E) - WEIGHTS(K) * SUM(IMAG(ON_SITE_SINGLE))
END DO
END DO
Run Code Online (Sandbox Code Playgroud)
这条线
ON_SITE_SINGLE(J) …Run Code Online (Sandbox Code Playgroud) 我希望能够在以后的任何时间打开一个(非常大的)文件并从任意点读取数据,而不会将整个内容保留在内存中.
这可能吗?
我想打开文件的句柄,其他任何东西都不会读取/写入此文件,并且能够在以后的某个时间点从任何给定的偏移量和长度中获取数据,而无需再次搜索磁盘中的文件.
我以为会有某种形式
1, open handle to file
2, create reader
3, skip reader to X
4, read for Y
5, reset reader to 0
6, return to step 3
Run Code Online (Sandbox Code Playgroud)
起初看起来好像BufferedReader.mark是我想要的,但是文档建议如果mark, skip, read, reset我标记的内容,我跳过的内容,将被保存在内存中?
从文档中,
在保留标记的同时限制可以读取的字符数.尝试在读取字符达到此限制或更高时重置流可能会失败.大于输入缓冲区大小的限制值将导致分配一个大小不小于limit的新缓冲区.因此,应谨慎使用大值.
它说"读",所以也许如果我跳过,它不计入这个限制(这是有意义的),但我可能正在阅读相当多,所以看起来这个新分配的输入缓冲区可能会变得非常大.我不希望这发生......
有没有更好的方法来解决这个问题?
我正在使用增强的for循环,它看起来像这样:
public void addItems (Iterable<Item> items) {
for (Item item : items) {
addItem(item);
}
}
public void addItems(Item[] items) {
for(Item item : items) {
addItem(item);
}
}
Run Code Online (Sandbox Code Playgroud)
使用Iterable允许我使用Listet al.,但我必须有一个单独的常规数组方法.有没有办法结合这个(不使用反射,或增加行数,或创建垃圾),所以我不必重复代码?
我是C++的新手,我遇到了一个我不明白的错误.
class1* a = (class1*)p1;
class2* b = (class2*)p2;
a->foo(b);
Run Code Online (Sandbox Code Playgroud)
错误是:
error: no matching function for call to 'a::foo(b*&)'
note: candidates are: void a::foo(const b&)
Run Code Online (Sandbox Code Playgroud)
我怎么做到这一点?
java ×5
arrays ×1
c ×1
c++ ×1
equals ×1
fortran ×1
javascript ×1
optimization ×1
pointers ×1
proguard ×1
reflection ×1
scripting ×1