Tag: 接口

标记注释与标记界面

在阅读Marker接口时,我偶然发现了以下网站: 第37项:使用标记接口来定义类型 根据Joshua Bloch的说法,Marker接口相对于Marker注释有两个优点。 标记接口定义由标记类的实例实现的类型; 标记注释没有。 此类型的存在允许您在编译时捕获错误,如果使用标记注释,则在运行时无法捕获这些错误。 标记界面相对于标记注释的另一个优点是可以更精确地定位它们。 如果使用目标ElementType.TYPE声明注释类型,则可以将其应用于任何类或接口。 假设您有一个仅适用于特定接口实现的标记。 如果将其定义为标记接口,则可以使其扩展到适用的唯一接口,从而保证所有标记类型也是适用的唯一接口的子类型。 好的,第一点被理解,但我不确定我是否正确理解第二点: 如果使用目标ElementType.TYPE声明注释类型,则可以将其应用于任何类或接口。 同样,如果我有一个标记接口,那么它也可以应用于任何类或接口。 是不是对标记注释和标记界面说了同样的话? 如何更精确地定位标记界面? 第二点还提到: 您可以[标记接口]扩展适用的唯一接口,保证所有标记类型也是适用的唯一接口的子类型。 您是否也可以通过使用@Inherited元注释来实现注释 ?

Java界面抛出exception最佳实践

我正在定义一个新的接口API ……诚然,这不是我经常做的事情。 我想定义接口方法来抛出exception,为实现者提供一些灵活性。 然后,他们可以选择抛出exception,抛出一个更具体的Exception子类,或者根本不抛出任何东西。 我已经阅读过几次虽然很好地允许实现类这种灵活性,但使用“throws Exception”定义接口方法也是不好的。 相反,建议inheritanceException(例如MyException)并抛出子类。 对这种做法的解释缺乏细节,那么有人可以详细说明这种最佳做法吗? 谢谢。

接口的Springdependency injection

好吧,我一直在看一些关于Springdependency injection以及MVC的教程,但我似乎还不明白我们如何才能具体实例化类? 我的意思是,例如,我有一个变量 @Autowired ClassA someObject; 我如何使spring创建someObject作为ClassB的实例,它将扩展ClassA? 像someObject = new ClassB(); 我真的不明白它在Spring中是如何工作的,ContextLoaderListener是自动完成它还是我们必须创建某种配置类,我们确切地指定spring应该将这些类实例化为什么? (在这种情况下,我没有在教程中的任何地方看到过)如果是,那么我们如何指定它们是什么样的? 我们如何配置它在web.xml等工作?

Java:在超类方法签名中返回子类

我正在研究一个问题,其中有几个Foo实现,伴随着几个FooBuilder 。 虽然Foo共享几个需要设置的常见变量,但它们也有不同的变量,需要各自的FooBuilder来实现某些特定的function。 为了简洁,我想让FooBuilder的setter使用方法链,比如: public abstract class FooBuilder { … public FooBuilder setA(int A) { this.A = A; return this; } … } 和 public class FooImplBuilder extends FooBuilder{ … public FooImplBuilder setB(int B) { this.B = B; return this; } public FooImplBuilder setC(int C) { this.C = C; return this; } … } 依此类推,有几种不同的FooBuilder实现。 […]

Java中的冲突接口方法

可能重复: 接口实现中的方法名称冲突 – Java 如果我们需要实现两个接口,包含一个具有相同名称和参数但返回类型不同的方法,我们该怎么办? 例如: interface A { public int foo(); } interface B { public double foo(); } class C implements A, B { public int foo() {…} // compilation error } 有没有一种简单的方法可以解决这个问题?

界面是否解决了“致命的死亡钻石”问题?

界面是否解决了死亡问题的致命钻石 ? 我不这么认为,例如: // A class implementing two interfaces Interface1 and Interface2. // Interface1 has int x=10 and Interface2 has int x = 20 public class MultipleInterface implements Interface1, Interface2{ public void getX(){ System.out.println(x); } } 在这里我们得到一个模棱两可的x 。 虽然接口是解决方法模糊性的好方法,但我猜它们在变量的情况下会失败? 我对么? 如果我遗失了什么,请赐教。

Java二进制兼容性问题:sun.font.FontManager类成为接口

我正在使用Lobo – Java Web浏览器库,它给了我一个例外,经过一些研究后我确定可能是因为该库已经与旧版本的Java进行了编译。 代码如下: import java.io.IOException; import org.lobobrowser.html.UserAgentContext; import org.lobobrowser.html.parser.DocumentBuilderImpl; import org.lobobrowser.html.parser.InputSourceImpl; import org.lobobrowser.html.test.SimpleUserAgentContext; import org.xml.sax.SAXException; public class Cobratest { public static void main(String[] args) throws SAXException, IOException { UserAgentContext uAgent = new SimpleUserAgentContext(); DocumentBuilderImpl docBuild = new DocumentBuilderImpl(uAgent); docBuild.parse(new InputSourceImpl(“http://dic.amdz.com/”)); } } 并且堆栈跟踪是: Exception in thread “main” java.lang.IncompatibleClassChangeError: Found interface sun.font.FontManager, but class […]

Class内的接口

Q1。 我可以在java中的类中有一个接口吗? Q2。 我可以在界面中有一个类吗? 如果是,那么在哪种情况下应该使用这样的类/接口。

为什么要将对象分配给接口?

我曾多次听说过在实例化对象时你应该这样做: “Interface”name = new“Class”(); 例如,对于实现List的类链表: List name = new LinkedList(); LinkedList实现了许多接口,包括queue,deque等。上面的代码和之间有什么区别 LinkedList name = new LinkedList(); 要么 Queue name = new LinkedList(); 为什么必须两次指定类型; 这似乎是多余的,但oracledocs似乎并未提及它。

具有类和嵌套静态接口的Javagenerics

我想在嵌套的静态接口中使用generics类。 我的目标是做这样的事情: public class MyClass{ private MyInterface task; public static interface MyInterface{ void aMethod (T item); } } 但是我得到了错误:无法对非静态类型T进行静态引用。如果我做了一些更改(下面)我可以在接口中使用generics类型,但是我想避免使用这种方法,因为写入它是多余的相同的类2次:一个用于MyClass,一个用于MyInterface。 public class MyClass{ private MyInterface task; public static interface MyInterface{ void aMethod (T item); } } 谢谢。 编辑 :我想这样做: MyClass c = new MyClass (); c.setInterface (new MyClass.MyInterface (){ @Override public void aMethod (String s){ … […]