我想获取Python对象所来自的模块.都
x.__module__
Run Code Online (Sandbox Code Playgroud)
和
x.__class__.__module__
Run Code Online (Sandbox Code Playgroud)
似乎工作.这些完全是多余的吗?是否有理由偏爱另一个?
我在使用线程中的JNI调用本机函数时遇到了一个棘手的问题.
本机函数是执行计算密集型任务的遗留代码.由于我不想冻结程序的其余部分,因此应该在后台线程中执行计算.EventBus用于将计算结果发送回主程序.
基本上它应该很简单,像这样:
public class CalculationEngine {
private CalculationEngine(){}
public static void calculateInBackground(final Parameters parameters) {
new Thread(new Runnable() {
public void run() {
// Someone might change the parameters while our thread is running, so:
final Parameters clonedParameters = parameters.clone();
Results results = new Results();
natCalc(clonedParameters, results);
EventBus.publish("Results", results);
}
}).start();
}
public static void calculateNormally(final Parameters parameters) {
Results results = new Results();
natCalc(parameters, results);
EventBus.publish("Results", results);
}
private static native synchronized void
natCalc(Parameters …Run Code Online (Sandbox Code Playgroud) 我想制作一个具有以下界面的地图类容器:
public <T> Thing<T> get(Class<T> clazz);
public <T> void put(Class<T> clazz, Thing<T> thing);
Run Code Online (Sandbox Code Playgroud)
有趣的是,T每个Class<T>- > Thing<T>对中的s 是相同的T,但容器应该能够容纳许多不同类型的对.最初我尝试了一个(哈希)地图.但是,例如,
Map<Class<T>, Thing<T>>
Run Code Online (Sandbox Code Playgroud)
是不对的,因为那个地图中的所有对都是T一样T的.当然,
Map<Class<?>, Thing<?>>
Run Code Online (Sandbox Code Playgroud)
工作,但后来我没有类型安全保证,所以当我get(String.class),我不能确定我得到一个Thing<String>实例.
有没有一种明显的方法来实现我正在寻找的那种类型的安全性?
在Windows(Vista)的系统,我应该在哪里地方,应该是可读的数据,并通过每个人的计算机即每个用户可写的,?Vista的C:\ Users\xxx\AppData\something,C:\ Program Files和C:\ ProgramData目录和UAC的概念有点令人困惑.
此外,有没有现成的解决方案来确定Java的位置?我想它需要与本机库进行一些交互,因为System.getProperties只有user.home和user.dir,它们都不是全局可写的.
在Swing(J)对话框中,setModal设置模态 - 即对话框是否应阻止对其他窗口的输入.然后,setVisible docs说模态对话框:
如果对话框尚未显示,则在通过调用setVisible(false)或dispose隐藏对话框之前,此调用将不会返回.
实际上,如果对话框不是模态的,setVisible 它会立即返回.示例代码:
JDialog jd = new JDialog();
jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
/**
* If set to false, setVisible returns right away.
* If set to true, setVisible blocks until dialog is disposed.
*/
jd.setModal(false);
System.out.println("setting visible");
jd.setVisible(true);
System.out.println("set visible returned");
Run Code Online (Sandbox Code Playgroud)
我想创建一个不阻止输入到其他窗口的对话框,但仍然会阻止调用者.有什么好方法可以做到这一点,现在setVisible当对话框不是模态时不阻止?
有一些理由说明为什么 setVisible行为取决于形态?
以下课程:
class Pizza {
Ingredients ingredients;
Price price;
public setIngredients(Ingredients ing) {
if (ingredients != null) {
throw new IllegalStateException();
}
ingredients = ing;
return this;
}
public setPrice(Price p) {
if (price != null) {
throw new IllegalStateException();
}
price = p;
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
可以在构建器模式中使用,在构建之后,它实际上是不可变的,因为每个属性只能设置一次.那是:
Pizza pizza = new Pizza().setIngredients(something).setPrice(somethingelse);
Run Code Online (Sandbox Code Playgroud)
但是,Pizza它不是线程安全的:不能保证线程B看到线程A设置的成分.有一些方法可以解决它:
final.但是你不能使用构建器模式.volatile.像同步一样感觉浪费.AtomicReference.我的问题是,告诉JVM一个类成员在调用某个方法后不会改变的最佳方法是什么?我应该只是同步对它的访问,并相信JVM会优化锁定吗?它只是感觉浪费,因为我知道成员应该final在它设置之后表现得像它一样.有没有更好的解决方案?
java ×5
swing ×2
blocking ×1
comments ×1
dialog ×1
directory ×1
generics ×1
global ×1
html ×1
javadoc ×1
mapping ×1
module ×1
permissions ×1
python ×1
synchronized ×1
type-safety ×1
visibility ×1
volatile ×1