我想获取当前正在运行的应用程序的窗口标题列表.
在Windows上我有EnumWndProc和GetWindowText.
在Linux上我有XGetWindowProperty和XFetchName.
什么是Native Mac等价物?
我有以下示例:
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
A<ConcreteErrorHandler> a = new A<ConcreteErrorHandler>();
a.m(); //Exception here!
}
public static class AbstractErrorHandler {
public static void handle(){
throw new UnsupportedOperationException("Not implemented");
}
}
public static class ConcreteErrorHandler extends AbstractErrorHandler{
public static void handle(){
System.out.println("Concrete handler");
}
}
public static class A<T extends AbstractErrorHandler>{
public void m(){
T.handle();
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么调用基类的方法,而不是派生的方法?handle()方法的签名完全相同.我知道静态方法不会继承,但是在我的情况下不应该抛出编译时错误吗?
有人可以解释这种行为吗?
假设类B继承自类A.以下是合法的Java:
List<A> x;
List<? super B> y = x;
Run Code Online (Sandbox Code Playgroud)
就规范而言,这意味着List<A>assignsTo List<? super B>.但是,我无法找到说这是合法的规范部分.特别是,我认为我们应该有子类型关系
List<A> <: List<? super B>
Run Code Online (Sandbox Code Playgroud)
但是Java 8规范的4.10节将子类型关系S >1 T定义为直接超类型关系的传递闭包,并且它根据计算一组超类型的有限函数来定义直接超类型关系T.由于可能存在任意数量的s继承,因此输入List<A>可以产生无限制函数,因此spec的子类型定义似乎为超级通配符分解.关于"类和接口类型之间的子类型"的第4.10.2节确实提到了通配符,但它只处理通配符出现在潜在子类型中的另一个方向(此方向适合计算的直接超类型机制).List<? super B>BA
问题:规范的哪一部分说上面的代码是合法的?
动机是针对编译器代码的,因此仅仅理解它为何直观合法或者提出一种处理它的算法是不够的.由于Java中的一般子类型问题是不可判定的,我想处理与规范完全相同的情况,因此需要处理此案例的规范部分.
请考虑以下代码:
public class Main {
public static class NormalClass {
public Class<Integer> method() {
return Integer.class;
}
}
public static class GenericClass<T> {
public Class<Integer> method() {
return Integer.class;
}
}
public static void main(String... args) {
NormalClass safeInstance = new NormalClass();
Class<Integer> safeValue = safeInstance.method();
GenericClass unsafeInstance = new GenericClass();
Class<Integer> unsafeValue = unsafeInstance.method();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我编译它:
$ javac -Xlint:unchecked Main.java
Run Code Online (Sandbox Code Playgroud)
它返回:
Main.java:16: warning: [unchecked] unchecked conversion
Class<Integer> unsafeValue = unsafeInstance.method();
^
required: Class<Integer>
found: Class
1 warning
Run Code Online (Sandbox Code Playgroud)
请注意,即使返回类型没有引用泛型类型,也只会将通用方法视为不安全. …
我想定义一个实现通用Comparable接口的类.在我的课堂上,我还定义了一个泛型类型元素T.为了实现接口,我将比较委托给T.这是我的代码:
public class Item<T extends Comparable<T>> implements Comparable<Item> {
private int s;
private T t;
public T getT() {
return t;
}
@Override
public int compareTo(Item o) {
return getT().compareTo(o.getT());
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我收到以下错误信息:
Item.java:11: error: method compareTo in interface Comparable<T#2> cannot be applied to given types;
return getT().compareTo(o.getT());
^
required: T#1
found: Comparable
reason: actual argument Comparable cannot be converted to T#1 by method invocation conversion
where T#1,T#2 are type-variables:
T#1 extends Comparable<T#1> declared in class …Run Code Online (Sandbox Code Playgroud) Scanner scan = new Scanner(System.in);
double numbers = scan.nextDouble();
double[] avg =..????
Run Code Online (Sandbox Code Playgroud) 当我阅读Effective Java时,作者告诉我单元素enum类型是实现单例的最佳方式,因为我们不必考虑复杂的序列化或反射攻击.这意味着我们无法创建enum使用反射的实例,对吧?
我做了一些测试,enum这里有一个类:
public enum Weekday {}
Run Code Online (Sandbox Code Playgroud)
然后我尝试创建一个实例Weekday:
Class<Weekday> weekdayClass = Weekday.class;
Constructor<Weekday> cw = weekdayClass.getConstructor(null);
cw.setAccessible(true);
cw.newInstance(null);
Run Code Online (Sandbox Code Playgroud)
如你所知,它不起作用.当我改变关键词enum时class,它有效.我想知道为什么.谢谢.
byte a = 1;
byte b = 1;
byte c = a + b;
Run Code Online (Sandbox Code Playgroud)
引发错误:可能会损失精度
byte subt = a_s - a_b;
^
required: byte
found: int
Run Code Online (Sandbox Code Playgroud)
这种行为是与jvm有关还是在java语言中定义的.
编辑:如果它是用java语言定义然后这样做是因为记住jvm?
表示如果java支持byte数据类型,那么为什么会operation on byte产生结果int
我试图从文件功能做一个简单的回放,似乎我的回调函数永远不会被调用.它并没有真正意义,因为所有OSStatus都返回0,其他数字也都显示正确(就像输出数据包从AudioFileReadPackets读取指针).
这是设置:
OSStatus stat;
stat = AudioFileOpenURL(
(CFURLRef)urlpath, kAudioFileReadPermission, 0, &aStreamData->aFile
);
UInt32 dsze = 0;
stat = AudioFileGetPropertyInfo(
aStreamData->aFile, kAudioFilePropertyDataFormat, &dsze, 0
);
stat = AudioFileGetProperty(
aStreamData->aFile, kAudioFilePropertyDataFormat, &dsze, &aStreamData->aDescription
);
stat = AudioQueueNewOutput(
&aStreamData->aDescription, bufferCallback, aStreamData, NULL, NULL, 0, &aStreamData->aQueue
);
aStreamData->pOffset = 0;
for(int i = 0; i < NUM_BUFFERS; i++) {
stat = AudioQueueAllocateBuffer(
aStreamData->aQueue, aStreamData->aDescription.mBytesPerPacket, &aStreamData->aBuffer[i]
);
bufferCallback(aStreamData, aStreamData->aQueue, aStreamData->aBuffer[i]);
}
stat = AudioQueuePrime(aStreamData->aQueue, 0, NULL);
stat = AudioQueueStart(aStreamData->aQueue, NULL);
Run Code Online (Sandbox Code Playgroud)
(未显示的是我正在检查stat函数之间的值,它只是恢复正常.)
和回调函数:
void …Run Code Online (Sandbox Code Playgroud) 用Java创建一个新的GUI(1.8)Swing,我正在寻找一种方法来覆盖所有组件的resize行为.
让我用一些编辑过的照片向你解释:
这是我的全屏GUI,有3个面板和一个JToolBar.绿色的需要具有固定的大小,其他的可以调整大小.
目前,我只有2个小GridLayout组织它们(一个垂直,一个水平绿色和青色面板).

例如,如果我从右侧缩小框架尺寸,我希望根据新的框架尺寸调整蓝色和青色面板的大小.但必须修复绿色面板.(这不是我认为最困难的部分.)

这对我来说是最困难的部分.一旦青色(或蓝色)面板达到最小尺寸,我希望他将绿色面板" 推 "到左侧,即使它从框架上消失.
当然,将框架向右拉,将使绿色面板再次出现.

我怎么能这样做?
我想使用JSplitPane或特定的监听器手动决定调整大小行为,但我需要一些建议.
对不起,如果现有的帖子可以回答这个问题,我没有找到任何答案来解释这个问题.
提前致谢!
如果您想要更多示例,请查看"Evernote"软件,该软件的行为方式相同
java ×8
generics ×4
macos ×2
objective-c ×2
raw-types ×2
api ×1
arrays ×1
audioqueue ×1
autoresize ×1
byte ×1
callback ×1
comparable ×1
core-audio ×1
enums ×1
interface ×1
javac ×1
operation ×1
reflection ×1
resize ×1
static ×1
subtyping ×1
swing ×1