Tag: 接口

了解UnsupportedOperationException

我不太明白我可以在哪里抛出这个exception。 例如,我正在实现Future接口,并且不希望任何人调用该方法: 未来#get(long,TimeUnit) 。 那么,我可以抛出UnsupportedOperationException吗? public T get(long timeout, TimeUnit unit){ throw new UnsupportedOperationException(); } 事情是该方法的规范没有说什么关于抛出exception。 反过来,例外 抛出以指示不支持所请求的操作。 Class UnsupportedOperationException 我的意思是,如果您不希望它被调用或者它可能被认为是错误的,因为并非所有方法都已实现,它是否常见? 在我的具体情况下,我认为调用该方法没有意义……

为什么接口是静态的?

为什么我没有内部类的接口? 为什么它们本身就是static ? 对不起,如果这是一个愚蠢的问题,我已经尽力一次又一次谷歌,但我似乎无法将它包裹在我的头脑中。 为什么我不能在内部类/本地类中声明这些? 同样作为确认,我们可以在接口中拥有静态最终变量的原因是因为它们没有指定状态或任何类型的实现权限? 如果我们失去static并且只使用最后一个,我们需要一个没有意义的实例,因为你无法实例化一个接口。 对不起,我真的很困惑,我知道我应该提出另一个问题,但我认为这两个问题有些相关。

GWT Cell树,怎么用?

有人可以解释如何使用GWT单元树。 我试图谷歌它但没有找到任何有价值的教程? 谢谢

接口内的嵌套类

java编译器允许我在接口内编写一个Class定义。 这有什么具体用途吗? interface ClassInterface { void returnSomething(); int x = 10; class SomeClass { private int y; private void classDoingSomething() { } } } 请解释 。

检查类型是否为接口

我想validation发送给方法的参数,它必须是接口类型。 怎么问? void (Class interfaceType){ if (thisisnotaninterface){ throw… } }

为什么Java中没有Hashable接口

Java中的Object具有hashCode方法,但是它仅在HashSet或HashMap等关联容器中使用。 它为什么这样设计? 具有hashCode方法的Hashable接口看起来更优雅的解决方案。

带有List 方法的Java通用接口上的编译器错误

我不明白以下代码导致的编译器错误。 我定义了一个通用接口,参见Task,有两个方法: U doSomething(String value)和List getIDs() 。 doSomething()方法实际上使用generics类型作为其返回值的类型,但似乎不会导致问题。 getIDs()方法返回一个List,它与Task的类型无关,但是在使用for..each语句迭代返回值时会导致问题。 发生以下编译器错误。 error: incompatible types for (Integer value : task.getIDs()){ required: Integer found: Object 似乎接口上的类型擦除导致编译器忘记第二个方法上的声明类型,这与generics类型无关。 或者换句话说,为什么接口上的generics类型会影响编译器如何理解getIDs()方法的返回值,特别是在for..each语句的上下文中? 显然,如果我引用for..each之外的列表没有问题,但不是直接的。 public class InterfaceTest { public static void main(String[] args) { Task task = new MyTask(); // no complaints about the type here List values = task.getIDs(); // getting a compiler […]

实现接口的开销

我的一位同事告诉我,实现接口会引入开销。 这是真的? 我并不关心微观优化; 我只是想知道这需要更深入的细节。

需要静态变量及其在jvm上的开销

根据静态成员的概念,当第一次调用它的类时,它们被创建/加载到内存中。 它们在该类的所有实例中都很常见。 意味着它们不会被重新创建或重新初始化等。此外,它们只能通过类名访问。 不需要为该类创建对象来访问它们。 现在我的问题是; 在应用程序运行之前,静态成员是否一直在内存中? 即使该类的所有实例都已被GC(垃圾收集器)收集。 对于一个大型项目,8-10个团队正在一起工作,他们不关心其他团队的编码。 他们可以根据需要创建静态成员。 如果所有成员都缓存在内存中,它是否会在JVM上创建开销? 默认情况下,接口的所有成员都是STATIC,并且在许多情况下接口的使用都很好。 但如果我记住上述问题,我还应该使用接口吗?

如何设置JDI启动连接器?

所以我正在尝试自己进入JDI。 通过首先使用VM命令启动调试对象,我已经成功将调试器应用程序挂接到我的debugee程序中: -agentlib:jdwp=transport=dt_socket,server=y,address=8000 然后启动我的调试器,通过使用附加连接器建立连接: VirtualMachineManager vmm = Bootstrap.virtualMachineManager(); AttachingConnector ac = vmm.attachingConnectors().get(0); Map env = ac.defaultArguments(); env.get(“port”).setValue(“8000”); env.get(“hostname”).setValue(“localhost”); VirtualMachine vm = ac.attach(env); 但现在我希望我的调试器应用程序启动调试对象程序本身。 我知道在这种情况下必须使用启动连接器。 所以我尝试了这个: VirtualMachineManager vmm = Bootstrap.virtualMachineManager(); LaunchingConnector lc = vmm.launchingConnectors().get(0); Map env = lc.defaultArguments(); env.get(“main”).setValue(“p.DebugDummy”); env.get(“suspend”).setValue(“true”); env.get(“home”).setValue(“C:/Program Files/Java/jdk1.7.0_51”); VirtualMachine vm = lc.launch(env); 但是,当我启动这个应用程序时,我的debugee程序没有启动。 我没有例外或任何事情,尽管上面的代码有一堆后续代码; 像: // A single implementor of this interface […]