我编写Eclipse插件并将一些类导出为API,同时希望限制对其他类的访问.
我按照常见的Eclipse实践将这些类分成".internal"子包.
但是,我不能在这些类上使用"包"或默认级别访问,因为我们导出的类需要使用它们中的许多.
防止或阻止我的API用户出于自己的目的使用这些类的最佳做法是什么?有自动检查器吗?
我承认,当我别无选择时,我已经涉足了使用Eclipse的一些内部类:)
澄清:我对非插件代码有类似的需求.
我最喜欢的大学数据结构之一就是Trie.如果共享前缀,它是一个很好的数据结构,用于保存大量字符串.查找也很好,因为它们是在字符串的O(| length |)处完成的,无论集合中有多少字符串.
相比之下,平衡树的设置项数量为O(log N),加上您为比较支付的费用.哈希表将涉及哈希计算,比较等.
因此,令我惊讶的是,在大多数语言的标准库中没有Trie实现.
我能想到的唯一原因是内存访问成本太高的可能性.如果进行树查找,则不是在调查O(log N)位置,而是在进行O(| length |)不同的位置,并产生所有后果.如果字符串很长,这可能会导致太多.
所以我想知道:我刚才描述的问题有多少?当您需要存储大型字符串或字符串映射时,您会怎么做?
我担心我误解了C中的堆栈行为.
假设我有以下代码:
int main (int argc, const char * argv[])
{
int a = 20, b = 25;
{
int temp1;
printf("&temp1 is %ld\n" , &temp1);
}
{
int temp2;
printf("&temp2 is %ld\n" , &temp2);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么我在两个打印输出中都没有获得相同的地址?我得到的temp2离temp1只有一个int,好像temp1从未被回收过.
我的期望是堆栈包含20和25.然后将temp1放在顶部,然后将其删除,然后将temp2放在顶部,然后将其删除.
我在Mac OS X上使用gcc.
请注意,我使用-O0标志进行编译而不进行优化.
那些想知道这个问题的背景的人:我正在准备关于C的教材,我试图向学生们展示他们不仅应该避免从函数返回指向自动变量的指针,而且还要避免从中获取变量的地址嵌套块并在外部取消引用它们.我试图证明这是如何导致问题的,并且无法获得截图.
如果我有一个类的引用并在其上调用一个方法,并且该类或方法是最终的,我的理解是编译器或JVM将用更便宜的静态调度替换动态调度,因为它可以确切地确定哪个版本将被调用.
但是,如果我有一个接口的引用,并且接口当前只有一个实现者,并且该实现者是final或该方法在该实现者中是最终的,那么JVM能否在运行时找出并优化这些调用呢?
我正在为一个介绍性的C类准备一些幻灯片,我试图提出使用指针算法而不是数组下标的好例子(和动机).
我在书中看到的很多例子都相当.例如,许多书籍展示了如何反转字符串中所有值的大小写,但除了用*p替换a [i]之外,代码是相同的.
我正在寻找一个好的(和简短的)单维数组的例子,其中指针算法可以产生明显更优雅的代码.有任何想法吗?
我在Java上有一个switch语句,在Enum上我们可以调用IMyInterface.MyEnum
我的每个case语句都有以下形式:IMyInterface.MyEnum.MyValue,(虽然我可以在导入时删除IMyInterface).
但是,编译器(Java 6)会抛出一个错误:"必须用unqalified枚举常量MyValue替换合格的case标签IMyInterface.MyEnum.MyValue".
我显然可以这样做,但对于我的生活,我不明白这个错误的目的是什么.显然,如果编译器可以处理实际值,它应该能够处理完全限定名称,就像它对常量一样.实际上,我会假设编译器将常量转换为完全限定名.
那么,Java大师们,这背后的理由是什么?谢谢!
我一直在从J2EE查看JMS API,并发现了一个奇怪的行为,其中在接口中声明的某些方法(例如,Session中的createQueue)在子接口(例如QueueSession)中再次声明,并且具有相同的文档.
由于子接口"继承"它继承的接口的所有方法声明,并且由于JavaDoc工具在排序子接口的JavaDocs并创建"继承的操作"列表时没有问题,因此我无法弄清楚它实现了什么.
唯一的想法是,最初调用是在Session中,然后在创建特定子类时移动到QueueSession,尽管那时我希望在大写的文档中看到一些东西.但这只是猜想.
所以问题是:在子接口中重新声明方法是否有令人信服的理由?
我们有一个大型高性能软件系统,它由多个交互式Java进程(而不是EJB)组成.每个进程可以在同一台机器上,也可以在不同的机器上.
某些事件在一个进程中生成,然后以不同的方式传播到其他进程以进行进一步处理,依此类推.
出于基准测试目的,我们需要创建一个日志,记录每个事件何时通过"检查点",最终将这些日志组合起来,以获得每个事件如何通过系统传播的时间线以及延迟(当然,流程切换和IPC添加延迟,没关系).
当然,问题是时钟同步.所以这是我的问题:
1)如果所有进程都在同一台机器上,是否保证currentTimeMilis在通话时是准确的?ITP的错误是否存在一定的约束?
2)如果某些进程可能在不同的机器上,那么是否存在用于时钟同步的现成解决方案(也是免费或开源的)?我最好寻找可以绕过操作系统(Windows或Linux)并直接从Java工作的解决方案.我也非常理想地寻找能够以微秒精度运行的东西.我考虑过NTP,但我不确定它是否可以通过Java而不是通过操作系统获得,而且我不确定它的复杂性.
3)有没有办法确定在特定配置(或我最终使用的任何解决方案)中使用NTP的误差范围,以便我可以在计算延迟时给出误差幅度?
谢谢!
java distributed real-time clock-synchronization vector-clock
假设我上课了C.
我可以编写o = C()创建实例C并将其分配给o.
但是,如果我想将类本身分配给变量然后实例化它,该怎么办?
例如,假设我有两个类,例如C1和C2,我想做类似的事情:
if (something):
classToUse = C1
else:
classToUse = C2
o = classToUse.instantiate()
Run Code Online (Sandbox Code Playgroud)
实际的语法是instantiate()什么?打个电话__new__()好吗?
我需要在SWT中显示和允许选择标签的功能.有效利用空间的东西,理想情况下允许缩放标签.
是否有标签云小部件或是否有一个容易获得?
我能够手动进入标签云并且没有太多工作的最接近的是使用每个标签带有按钮的行布局,但是然后仅在每个标签旁边放置一个数字.如果我试图根据频率调整大小,我会得到太多的开放空间,因为每一行都有最新标签的垂直空间.我假设标签云实现将使用更专业的布局.
java ×6
c ×2
distributed ×1
enums ×1
interface ×1
packages ×1
performance ×1
python ×1
real-time ×1
stack ×1
swt ×1
tag-cloud ×1
trie ×1
vector-clock ×1