我试图在Kotlin文档中找到关于这个决定的更多细节,但没有任何章节"谈及"它.有谁知道是什么驱使在Kotlin的类名中使用"Kt"后缀的决定?它是为了避免与Java类名冲突,还是有更多呢?
正如大多数人所知,在C/C++中,当我处理动态库时,我会写一个与此类似的宏.
#ifdef _WIN32
# define DLLAPI __declspec(dllimport)
#else
# define DLLAPI
#endif
Run Code Online (Sandbox Code Playgroud)
我想要做的是D编程语言中的模板mixin,所以我可以很好地声明某个库中的函数:
mixin DLLAPI(int, "function1", string, int); // int function1(const char* arg1, int arg2)
mixin DLLAPI(byte, "function2"); // char function2()
// etc
Run Code Online (Sandbox Code Playgroud)
第一个问题是 - 为此使用模板mixin是一个好主意,还是只在version (Windows) {} version (linux) {} //...块中编写代码?第二个问题 - 如何在函数名称之后很好地获取所有类型?:)
我试图找出如何检测当用户按Tab键或通过鼠标单击组件区域外时JComboBox是否失去焦点.
将FocusListener添加到JComboBox的编辑器组件对我没有帮助,因为我无法确定用户是否使用了鼠标或通过tab键移动了焦点.任何想法将不胜感激.
编辑1:我想要实现的是:
编辑2:似乎我必须使用setFocusTraversalKeysEnabled(false)在TAB被按下时获得通知,当我捕获该事件时,我应该手动转移焦点...我不喜欢这个解决方案,但这是迄今为止我能来的最好的起来.
解:
以下Java代码实际上解决了我的问题.正如我在Edit 2中所写,最简单的解决方案是禁用焦点遍历.我无耻地借用了Kleopatra的代码,现在一切正常.:)
if (!isTableCellEditor()) {
comboBoxEditor.setFocusTraversalKeysEnabled(false);
Action myAction = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
handleTabPress();
comboBoxEditor.transferFocus();
} // actionPerformed() method
};
comboBoxEditor.getActionMap().put("tab-action", myAction);
comboBoxEditor.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("TAB"), "tab-action");
} // if
Run Code Online (Sandbox Code Playgroud)
感谢所有参与者的讨论!
有没有办法在子类中覆盖opDispatch?我真正想做的是传递一个以超类作为静态类型的变量,但是将对opDispatch的调用重定向到它的子类型(动态类型).
基本上,我希望此代码打印"Sub"而不是"Super".
import std.stdio;
class Super
{
void opDispatch(string m)()
{
writeln("Super");
}
}
class Sub : Super
{
override void opDispatch(string m)()
{
writeln("Sub");
}
}
void main()
{
Super s = new Sub();
s.callingOpDispatch; // Writes "Super" instead of "Sub"
}
Run Code Online (Sandbox Code Playgroud)
我傻眼了,因为我无法通过使用抽象方法强制编译器查找方法覆盖(D不允许抽象模板化方法).
PS:有人可以创建标签opDispatch吗?(在我看来这对D会有好处吗?)
最近,我解决了从JList到JTable对象的DnD项时遇到的“神秘” IOException。显然,我传输的对象必须可序列化。这是“必须”吗,还是有一种避免序列化的方法?
我必须注意的一件事-我要传输的类型在另一个程序包中。
(这是一个常见的D问题.)
假设我有一个D关联数组:string[int] aarr = [ 3 : "three", 5 : "five", 9 : "nine" ];
- 有一种简单的方法可以将aarr的密钥作为数组吗?
我试图弄清楚如何在NetBeans 7.4中进行svn切换.到目前为止,我在网上找不到任何参考如何做到这一点.我们是否真的必须在命令行之间切换分支,或者有一些方法可以使用NetBeans Subversion插件执行此操作?
我试图找到一种优雅的方法,当用户关闭主应用程序窗口时,使JTable停止单元格编辑(实际取消它).我知道可以使用WindowAdapter完成这样的事情,但为了使其正常工作,我需要对窗口的引用.问题是我有时候没有它.
我正在使用动态数组来实现我的堆栈.我写了pop如下:
int pop() {
int n = arr[--arr.length];
return n;
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码我Range violation在运行时遇到错误.但是使用以下代码:
int pop() {
int n = arr[arr.length - 1];
arr.length--;
return n;
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.我不明白为什么,对我来说两者都应该是等价的.我错过了什么?
编辑:也许这就是为什么--arr.length导致我要访问的元素被从数组中"删除"?
还有,push(N)就是这样arr ~= n;
在 Ingres 中,DBA 在创建支持 Unicode 的 Ingres 数据库时有两个选择。createb 具有-iNFC(标准化形式 C)和-nNFD(标准化形式 C)的标志。文档对它们没有区别,描述几乎相同。
我们是否可以假设它们之间没有差异,或者实际上存在一些差异?
d ×5
java ×3
swing ×3
append ×1
arrays ×1
ingres ×1
inheritance ×1
jcombobox ×1
jtable ×1
key-bindings ×1
kotlin ×1
mixins ×1
netbeans ×1
opdispatch ×1
overriding ×1
string ×1
svn ×1
templates ×1