相关疑难解决方法(0)

为什么要首选Java类的接口?

PMD将报告违规行为:

ArrayList<Object> list = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)

违规是"避免使用像'ArrayList'这样的实现类型;而是使用接口".

以下行将更正违规行为:

List<Object> list = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)

为什么要使用后者List而不是ArrayList

java collections interface

71
推荐指数
4
解决办法
2万
查看次数

什么是NoSuchBeanDefinitionException以及如何解决它?

NoSuchBeanDefinitionException在Spring中解释以下关于异常的内容:

  • 这是什么意思?
  • 它会在什么条件下抛出?
  • 我该怎样预防呢?

本文旨在对NoSuchBeanDefinitionException使用Spring的应用程序中出现的问题进行全面的问答.

java spring applicationcontext

51
推荐指数
1
解决办法
6万
查看次数

"程序到界面".这是什么意思?

可能重复:
"编程到接口"是什么意思?

我一直看到这个词:

编程到界面.

究竟是什么意思?真实的设计场景将受到高度赞赏.

java oop

35
推荐指数
5
解决办法
2万
查看次数

ContentPane和JPanel之间有什么关系?

我找到了一个例子,其中按钮被添加到面板(实例JPanel),然后面板被添加到容器(由其生成的实例getContentPane()),然后容器被构造包括在JFrame(窗口)中.

我尝试了两件事:

  1. 我摆脱了容器.更详细地说,我向面板(实例JPanel)添加了按钮,然后我将面板添加到了窗口(实例JFrame).它工作正常.

  2. 我摆脱了面板.更详细地说,我直接将按钮添加到容器中,然后将容器添加到窗口(实例JFrame).

所以,我不明白两件事.

  1. 为什么我们有两个竞争机制来做同样的事情?

  2. 将容器与面板(JPanel)结合使用的原因是什么?(例如,我们在JPanels中包含按钮,然后在Containers中包含JPanels).我们可以JPanel加入JPanel吗?我们可以在容器中包含容器吗?

添加:

也许我的问题的本质可以放在一行代码中:

frame.getContentPane().add(panel);
Run Code Online (Sandbox Code Playgroud)

我们介入什么getContentPane()?我试过frame.add(panel);,它工作正常.

增加2:

我想添加一些代码来更清楚我的意思.在这个例子中我只使用JPane:

import java.awt.*;
import javax.swing.*;
public class HelloWorldSwing {
    public static void main(String[] args) {
        JFrame frame = new JFrame("HelloWorldSwing");
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());        
        panel.add(new JButton("W"), BorderLayout.NORTH);
        panel.add(new JButton("E"), BorderLayout.SOUTH);
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我只使用内容窗格:

import java.awt.*;
import javax.swing.*;
public class …
Run Code Online (Sandbox Code Playgroud)

java user-interface swing jpanel jframe

33
推荐指数
1
解决办法
6万
查看次数

INTERFACES或TARGET_CLASS:我应该选择哪个proxyMode?

我正在寻找一种存储我的对象的方法,似乎最好的方法是使用代理.我在互联网上找到了2个注释,我应该使用哪个注释:

@Scope(value = "session", proxyMode = ScopedProxyMode.INTERFACES)
Run Code Online (Sandbox Code Playgroud)

要么

@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS )
Run Code Online (Sandbox Code Playgroud)

此外,代理是否是使用@Component @Scope("session")或使用的最佳方式@SessionAttributes

spring spring-mvc

31
推荐指数
3
解决办法
2万
查看次数

函数返回接口意味着什么?

我刚看到一个这样的成员函数:

public Cat nextCat(GameState state); 
Run Code Online (Sandbox Code Playgroud)

但Cat是这样的界面:

public interface Cat {
        void makeCat(GameState state);
}
Run Code Online (Sandbox Code Playgroud)

所以我很困惑如何解释这个.我知道当某些东西返回一个对象或一个原语时它意味着什么.但是返回界面意味着什么?如何使用此函数的返回值?

java

30
推荐指数
3
解决办法
3万
查看次数

在Java中实例化接口

我有这个界面:

public interface Animal {
    public void Eat(String name);
}
Run Code Online (Sandbox Code Playgroud)

这段代码实现了这个接口:

public class Dog implements Animal {
    public void Eat(String food_name) {
        System.out.printf(food_name);
    }

    public static void main(String args[]) {
        Animal baby2 = new Dog(); //HERE!!!!!!!!!!!!!!!!!!!!!!
        baby2.Eat("Meat");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么代码有效?无法实例化接口.然而在这种情况下,界面被实例化(标记为"HERE !!!!!!!!!!!!!").

这里发生了什么?

java interface abstract

29
推荐指数
4
解决办法
4万
查看次数

原因 - List list = new ArrayList();

我见过很多次这样的代码:

List<String> list = new ArrayList<String>();

为什么人们采用ArrayList(和其他类)的父代替生成对象的类型?

这会降低性能吗?或者为什么有人这样做?

java list arraylist

27
推荐指数
4
解决办法
3万
查看次数

多态如何使我的代码更灵活?

我正在阅读Head First面向对象设计,以便更好地理解OOP概念.

多态性解释为:

Airplane plane = new Airplane();
Airplane plane = new Jet();
Airplane plane = new Rocket();
Run Code Online (Sandbox Code Playgroud)

您可以编写适用于超类的代码,如飞机,但可以使用任何子类.: - 嗯...... 我得到了这个.*.

它进一步解释说:

- > 那么多态如何使代码变得灵活?

好吧,如果你需要新的功能,你可以写一个新的AirPlane子类.但是,由于您的代码使用了超类,因此您的新类将在不对代码的其余部分进行任何更改的情况下工作.

现在我没有得到它.我需要创建一个飞机的子类.例如:我创建一个类,Randomflyer.要使用它,我将不得不创建它的对象.所以我会用:

Airplane plane = new Randomflyer();
Run Code Online (Sandbox Code Playgroud)

我没有得到它.即使我会直接创建子类的对象.当我添加新的子类时,我仍然不需要在任何地方更改我的代码.使用超类如何使我免于对其余代码进行额外更改?

oop polymorphism

27
推荐指数
6
解决办法
3993
查看次数

Scala的特征命名约定

假设我有一个traitScala

trait Connection {

  def init(name: String)
  def dispose
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个实现它的类.但是我想把它命名为Connection:

class Connection extends Connection {
  // ....
 }
Run Code Online (Sandbox Code Playgroud)

它不会起作用.当然,我可以用trait不同的名字命名,但事实证明,Scala中的命名约定说我应该将trait命名为普通类,这意味着没有任何前缀,我将在C#中使用(IConnection其中 IConnection将是interface).

而在这种特殊情况下的名称Connectionclasstrait更适合.

或者我在Scala的命名约定中遗漏了什么?

scala

25
推荐指数
4
解决办法
7770
查看次数