Tag: 接口

为什么Java 8接口中不允许使用`private static`字段?

当我尝试编译以下代码时 public interface SomeInterface{ private static Logger logger = Logger.getLogger(); public default void someMethod(){ logger.info(“someMethod: default implementation”); } } 我收到一个错误 Illegal modifier for the interface field SomeInterface.logger; only public, static & final are permitted 当我删除private修饰符时,代码编译,但我不希望包中的其他类看到此字段。 为什么Java在实际上有意义的时候不允许我做这样的事情?

如何从java中的jar文件实现多接口?

我已经创建了一个类并导入了我的接口,但是如何完成剩下的工作,我该怎么办? 在这里我有什么,但它不起作用我的意思是ClassCastExeption不起作用 代码示例: import java.util.LinkedList; import java.util.Queue; import com.revmetrix.code_test.linkify_queue.ProcessingQueue; import com.revmetrix.code_test.linkify_queue.ProcessingQueueFactory; public class Solution { ProcessingQueue newQueue; ProcessingQueueFactory runFactory; Solution() { ProcessingQueueFactoryClass runFactory = new ProcessingQueueFactoryClass(); ProcessingQueue newQueue = runFactory.createQueue(); } /**Your ProcessingQueueFactory must contain two methods: one for creating new * queues and one for cleaning up after them. In `createQueue`, just create a […]

铸造后目标对象采用什么类?

好的,noob问题。 我正在为SCJP学习并得到3个关于对象引用错误的问题,这似乎都表明了同样的误解。 只想确认正确的见解应该是什么。 对,这是问题: 1。 1.类CodeWalkFour { 2. public static void main(String [] args){ 3. Car c = new Lexus(); 4. System.out.print(c.speedUp(30)+“”); 5.雷克萨斯l =新雷克萨斯(); 6. System.out.print(l.speedUp(30,40,50)); 7.} 8.} 9.车级{ 10. private int i = 0; 11. int speedUp(int x){ 12.返回i; 13.} 14.} 15.雷克萨斯扩展汽车{ 16. private int j = 1; 17. private int k = 2; […]

特征和接口二进制兼容吗?

我很惊讶Scala在不同版本中是二进制不兼容的事实。 现在,因为在Java 8我们有默认的方法实现,它与我们提供的trait几乎相同,是否可以安全地在Java代码中使用特征? 我自己尝试使用它: trait TestTrait { def method(v : Int) def concrete(v : Int) = println(v) } public class Test implements TestTrait{ // Compile-error. Implement concrete(Int) @Override public void method(int v) { System.out.println(v); } } 但它拒绝编译。 编译器抱怨没有混淆concrete(Int) 。 虽然我在TestTrait指定了实现。

为什么对接口的引用数组可以包含实现该接口的类?

我已经阅读了许multithreading来解释接口和抽象类之间的差异; 这些post特别有用: 接口和抽象类有什么区别? 和接口与抽象类(通用OO) ; 但是,我找不到任何专门解决我问题的答案。 上下文:今天在课堂上我们编写了一个接口和两个实现接口的类: public interface Animal{ // This is in its own file void move(); void makeSound(); } class Dog implements Animal{ // The rest of these are in another file public void move(){ System.out.println(“Runs.”); } public void makeSound(){ System.out.println(“Barks.”); } } class Fish implements Animal{ public void move(){ System.out.println(“Swims.”); } […]

Java – 信号事件模式

我受到了AS3中Signals事件模式的启发,它取代了flash的原生事件。 它在性能和可读性方面都做得更好。 所以我试图用Java实现它。 这种模式的主要思想是你正在使用对象而不是类型,因此节省了找到“Dispatcher”类来处理事件调度的时间。(调度事件是向所有侦听器发送事件) 所以让我们跳转到代码中:在这个示例中,我将创建AlarmManager并处理他的警报事件。 首先,我们需要为此事件创建接口 public interface IAlarmEvent { void alarmEventHandler(String alert); } 现在事件本身: public class AlarmEvent extends Signal implements IAlarmEvent { public void alarmEventHandler(String alert) { dispatch(“alarmEventHandler”, alert); } } 这是AlarmManger: public class AlarmManager { public final AlarmEvent alarmEvent = new AlarmEvent(); public void init(){ // Dispatching the event alarmEvent.alarmEventHandler(“Wake up”); } } […]

发送Object类型的对象而不是String – Polymorphism

我有一个现有的方法,如下所示: public void parseMessage(String message){ … … … } 并通过调用它来调用该方法,如下所示 String message; parseMessage(message); 我需要修改它以处理新类型的消息。 从parseMessage方法调用的新类型消息的解析器在解析消息之前首先需要一些属性。 我在想做的是将消息作为一个看起来像这样的对象传递 public class MessageObject{ private String message; private String namespace; private String xmlVersion; } 然后我可以将现有方法称为 Object messageObject; parseMessage(messageObject); 然后,我可以通过将其作为(MessageObject)messageObject进行转换来使用它。 这是正确的做法,还是有更好的方法。 做上述事情有危险吗? PS。 我必须使用上面的转换方法作为im使用JDK1.4 谢谢 更新 我无法修改parseMessage方法。 它内部有一个调用,它为每个相关的解析器调用parse()方法。 public void parseMessage(String message){ … … parser.parse(message) } 上面显示的解析器引用是实现接口“Parser”的对象。 我正在介绍的新解析器遵循这种结构,它还实现了“Parser”接口。 唯一的修改(即对MessageObject的转换)在新的解析器中。 我无法更改现有的parseMethod,因为这将需要更改实现“Parser”接口的所有现有解析器。 我想避免根据消息类型调用特定的解析器。 […]

Java通用枚举function使用java 8默认方法和实用程序类

下面是我提出的失败尝试,指的是使用Reflection的Java Generic Enum类 。 想找到一个更好的方法来做到这一点。 我用这种方法找到了几个问题: 每次我都需要传递类类型。 示例 – EnumUtility.fromKey(Country.class,1) fromSet在城市和国家都重复 public enum City implements BaseEnumInterface { TOKYO(0), NEWYORK(1); private final int key; public static Set fromValue(Set enums) { return enums.stream().map(City::getKey).collect(Collectors.toSet()); } public int getKey() { return key; } private City(int key) { this.key = key; } } public enum Country implements BaseEnumInterface { USA(0), […]

Java – ZUI(Zoomable用户界面)

我目前正在做一个需要显示大量数据的小型个人项目,我突然想到实现一种可缩放的用户界面,允许用户浏览大量数据。 我知道现有的项目,比如ZVTM和Piccolo2d ,我可能会最终用于这项工作,但我也很想开始自己写作。 但是,我有点不确定如何开始。 从我一直在阅读的内容看来,像Piccolo2d这样的项目是由于Java中缺乏“场景图”管理而开发的,而Piccolo2d是基于旧版项目的工作开发的,例如“Pad”,“Pad ++”和’爵士乐’。 经过一段时间的谷歌搜索,我可以看到JavaFX中提供了场景图管理,但我想知道Java 7中的Swing是否具有此function。 我有点想一想,我想知道是否可以使用JLayer API实现基本的缩放界面,实质上是根据当前的缩放级别来装饰具有不同层的对象。 举个例子,假设我可以看到最远缩放级别的目录,然后放大将显示目录的内容,并进一步放大将显示目录中存在的文件内的文本。 我已经和Eagle Mode玩了一段时间,所以这是我正在考虑的一个完美的例子。 我知道这是一个很长的问题(如果它真的是一个问题)。 基本上,让我们假设Piccolo等人不存在,而我所拥有的只是核心Java 7 JDK,有人能提出一个好的起点吗? 似乎Piccolo2d很大程度上依赖于Java2d API,所以我想知道API是否已经进步,或者Java 7引入了新的机制来实现类似的效果。 我对可以提供的任何意见或建议感兴趣。 我知道这不是一项容易的任务,但没有任何时间限制,它只是一个个人项目。 谢谢

Iterator接口方法在哪里有hasNext(),next(),remove()定义? 因为接口永远不会定义方法只声明

Iterator接口方法在哪里定义了hasNext(),next(),remove()等? 接口不定义方法,只声明在其他类中定义的方法。 我们如何通过Iterator引用直接访问hasnext(),next()等方法? 例如: List l = new LinkedList(); l.add(1); l.add(2); Iterator iter = l.iterator(); while(iter.hasNext()) { Object o = iter.next(); System.out.println(o); } 在上面的示例中,使用引用iter(Iterator引用)可以在iter引用中分配任何方法吗? 请给我一个代码示例。 直到现在我才能理解这个概念。