草庐IT

b-Class-Interface

全部标签

java - 为什么这个泛型不能识别它的父类(super class)边界(Java)?

我有一个对象实例系统,其中包含对定义对象的引用。每个继承树都有一个顶级类。实例对象具有对相应定义类的泛型引用。在getter中使用泛型,顶级对象的子类无需转换即可获得正确的类型定义。但是,再次被子类化的抽象子类不能:classDef{}abstractclassAnimal{Ddef;DgetDef(){returndef;}}classCatDefextendsDef{}classCatextendsAnimal{}abstractclassBearDefextendsDef{}abstractclassBearextendsAnimal{}classBlackBearDefexte

java - 是否存在抽象类优先于接口(interface)的场景

我有一个场景,其中有几个子类具有相似的实现和一些额外的方法,每个子类的实现不同。我假设抽象类对于这种情况是一个不错的选择。但是如果那个抽象类实现一个包含所有方法声明的接口(interface)会更好吗?或者我应该坚持使用抽象类。简而言之,我想知道在哪些情况下我应该更喜欢层次结构顶部的抽象类而不是接口(interface)。 最佳答案 如果您的子类与抽象类有is-a关系,请使用抽象类。您可以同时拥有抽象类和接口(interface)-抽象类指定实现,接口(interface)指定API。集合框架就是一个例子——它有ArrayListe

java - 父类(super class)和子类都有自己的接口(interface)

以下可以吗?(请记住,我没有编写类的主体,也没有编写接口(interface);-))abstractclassSuperClassimplementsSuperInterfaceclassSubClassextendsSuperClassimplementsSubInterface或者这通常被认为是不好的做法?让我感到奇怪的是,以下内容不起作用:ListmyList;...for(SuperInterfacesi:myList){...} 最佳答案 不好也不坏。SubClass在这里实现了SuperInterface和SubInt

带键盘的 Java ListSelectionListener 接口(interface)

我已经实现了ListSelectionListener,如下所示,因此在选择第一个表中的特定行后,第二个表会相应更新。classSelectionListenerimplementsListSelectionListener{publicSelectionListener(){}@OverridepublicvoidvalueChanged(ListSelectionEvente){if(e.getSource()==myTrumpsAndMessages.jTable1.getSelectionModel()&&myTrumpsAndMessages.jTable1.getRowSe

java - 在java接口(interface)中使用实现类型

我想制作一个接口(interface),强制实现它的每个类都具有特定功能,用于实现类的类型。假设我有类MyClassA、MyClassB、MyClassC等,它们都需要在它们自己的类型上有一个函数:在MyClassA中:publicclassMyClassAimplementsMyClass{MyClassAfunction(MyClassAx){doSomethingImplementedInMyClassA(x);}}在MyClassB中:publicclassMyClassBimplementsMyClass{MyClassBfunction(MyClassBx){doSomet

java - 如何让一个我无法更改的类实现一个接口(interface)?

我有一个来自另一个闭源库的类,但我希望能够为它使用一个接口(interface)。原因是我不想到处进行instanceof检查或null检查,但我也不想扩展现有的类。例如,假设我有这段代码:publicclassExample{//QuietFooisfromanotherlibrarythatIcan'tchangeprivatestaticQuietFooquietFoo;//LoudFooismyowncodeandismeanttoreplaceQuietFooprivatestaticLoudFooloudFoo;publicstaticvoidmain(String[]ar

java - 接口(interface)继承 - 改变方法参数

我很难理解解释接口(interface)继承的java方式,例如:publicinterfaceModel{ModelgetModel();voidsetModel(Modelmodel);}publicclassBaseModelimplementsModel{@OverridepublicBaseModelgetModel(){returnnull;}//works@OverridepublicvoidsetModel(BaseModelmodel){}//compilationerror,itwantsModelinsteadofBaseModel}谁能解释为什么第一种方法有效而

java - 不再需要 Class.forName(JDBC_DRIVER)?

我在这里读到,从Java6开始,您不再需要使用以下方式注册JDBC驱动程序:Class.forName(JDBC_DRIVER);因为DriverManager使用位于系统属性"jdbc.drivers"中的路径检索正确的驱动程序。但是当我执行以下操作时:System.out.print(System.getProperty("jdbc.drivers"));null被打印出来。你知道我的应用程序为什么能正常运行吗??;) 最佳答案 这与该系统属性无关。Java6(和JDBC4)引入了一个称为“serviceprovider”的概念

java - Java 8 中函数式接口(interface)的定义

这个问题在这里已经有了答案:Precisedefinitionof"functionalinterface"inJava8(9个回答)关闭6年前。Java8中函数式接口(interface)的定义说:Afunctionalinterfaceisdefinedasanyinterfacethathasexactlyoneexplicitlydeclaredabstractmethod.(Thequalificationisnecessarybecauseaninterfacemayhavenon-abstractdefaultmethods.)Thisiswhyfunctionalint

java - Gradle Output Jar 没有 Main-Class

我有以下简单的build.gradle文件:applyplugin:'application'applyplugin:'java'mainClassName='com.kurtis.HelloGradle'下面的单个java文件位于src/main/java/com/kurtis/HelloGradle.java:packagecom.kurtis;publicclassHelloGradle{publicstaticvoidmain(String[]args){System.out.println("Hellogradle");}}但是,如果我运行gradlebuild,我会在bui