如何从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 * new ProcessingQueue, performing any necessary initialization of the queue * before it is returned. `createQueue` will be called multiple times during our * automated tests. In `stopQueue`, perform any cleanup required for a queue * created by your `createQueue` method. (Eg, stop threads, if necessary for * your solution.) `stopQueue` will be called once for each queue created with * `createQueue`. */ class ProcessingQueueFactoryClass implements ProcessingQueueFactory { public void stopQueue(ProcessingQueue p) { } // TODO encok burda sikinti var, queue yaratacam ama Proccesing Queue donderiyor bu // asil eleman ekleyecegim queue yi ProcessingQueue nin icinde mi yaratcam? // ProcessingQueue bi interface bu arada, bunu implement eden class ProcessingQueueClass yazdim // onun icinde queue olsun dedim yine gormuyor zalim queue olarak //bi loop var ProcessingQueue ile ProcessingQueueFactory arasinda, anlamadim! public ProcessingQueue createQueue() { Queue newQueue = new LinkedList(); return (ProcessingQueue) newQueue; } } /** * Your ProcessingQueue implementation will receive unprocessed textual data * from multiple concurrent producers through its `offer` method. Your queue * must provide a transformed version of the data via its `poll` method. The * transformation is described below. As a queue, the data received from * `poll` must be FIFO (first-in, first-out) with respect to calls to * `offer`; ie, the first items in should also be the first items out. If * data is available, `poll` must remove it from queue and return it. If no * data is available, then `poll` must return null. */ class ProcessingQueueClass implements ProcessingQueue { ProcessingQueueFactoryClass openFactory = new ProcessingQueueFactoryClass(); ProcessingQueue newQueue = openFactory.createQueue(); /**The linkify transformation should find raw URLs prefixed with "http(s)://" in * the input text and convert them to HTML links. For example, * http://www.example.com becomes www.example.com. Do not include the scheme * (http(s)://) in the anchor text. Any URLs that are already within HTML links * should not be modified. You can assume the input text contains multiple words * separated by white space (ie spaces, new lines) or punctuations (commas, * periods, etc.) */ public String linkifyTransformation(String s){ // System.out.println(s); String[] splitArray = s.split(" "); String transformedString = ""; for (int i = 0; i < splitArray.length; ++i) { if (splitArray[i].startsWith("https://")) { transformedString += "" + splitArray[i].substring(8) + " "; } else if (splitArray[i].startsWith("http://")) { transformedString += "" + splitArray[i].substring(7) + " "; } else { transformedString += splitArray[i] + " "; } } //System.out.println(transformedString); return transformedString; } public boolean offer(String s) { //returns transformedString linkifyTransformation(s); // we need to add the transformedString to our Queue, Where should we create?; //how to return true or false? return false; } public String poll() { return ""; } } public static void main(String[] args) { // String s = "The quick http://www.brown.com/fox // jumps https://over.com the lazy dog foo www.bar.com // is my favorite " // + "These aren't the droids you're looking for."; //Solution sol = new Solution(); //ProcessingQueueClass pqs = sol.new ProcessingQueueClass(); //pqs.linkifyTransformation(s); } } 

以下是一些可能有用的细节。

Revmetrix Linkify Queue Coding通过转换解决字符串数据的输入和输出问题。 此队列必须正确处理具有合理性能的并发操作。 从JAR实现ProcessingQueue和ProcessingQueueFactory。 您的ProcessingQueue实现将通过其offer方法从多个并发生成器接收未处理的文本数据。 您的队列必须通过其poll方法提供转换后的数据版本。 作为队列,从poll接收的数据必须是关于提供的呼叫的FIFO(先进先出);

通常,在java中implement interface ,需要实现它的方法并为该接口中定义的方法定义主体。

如果您不想实现该接口的所有方法体,则可以将类更改为abstract类,并将该方法标记为abstract

我不知道你对Java中的interfacesclasses有多熟悉,但我认为阅读一些教程如http://tutorials.jenkov.com/java/interfaces.html会有所帮助。

[问题变更后的编辑]

ClassCastException发生在这里:

 return (ProcessingQueue) newQueue; 

因为您非法将Queue的实例Queue转换为ProcessingQueue类型的接口。 这种强制转换不会发生,因为Queue或者它的父节点都没有实现ProcessingQueue接口。

但由于您的分配规范,您的实施是不对的。

你应该实现一个类来实现ProcessingQueue而另一个类来实现ProcessingQueueFactory (现在你完成了这个部分)。

您不应在ProcessingQueueClass类中创建ProcessingQueueFactoryClassProcessingQueue实例,因此请删除以下两行:

 ProcessingQueueFactoryClass openFactory = new ProcessingQueueFactoryClass(); ProcessingQueue newQueue = openFactory.createQueue(); 

您还应该在ProcessingQueue类中保留链接StringsQueue 。 因此, public ProcessingQueue createQueue()下行从public ProcessingQueue createQueue()方法移至ProcessingQueue类:

 Queue newQueue = new LinkedList(); 

 class ProcessingQueueClass implements ProcessingQueue { Queue newQueue = new LinkedList(); ... } 

在你的public boolean offer(String s)你应该得到linkifyTransformation(s);的结果linkifyTransformation(s); 并将其添加到newQueue和您删除public String poll()方法,然后返回 newQueue的第一项以维护FIFO范例。

现在关于ProcessingQueueFactoryClass :我这个类有两个简单的方法。 createQueue()方法的工作非常简单:只需创建ProcessingQueueClass类的实例并返回它。

另一种方法stopQueue(ProcessingQueue p) :此方法获取ProcessingQueue的实例作为参数。 因为您的ProcessingQueueClass类实现了ProcessingQueue ,所以输入参数的运行时类型的类型为ProcessingQueueClass 。 并且因为ProcessingQueueClass类中有一个Queue成员变量,所以此方法的目的是清除Queue newQueue项并释放它。

希望这会有所帮助,

祝好运。