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?
请NoSuchBeanDefinitionException在Spring中解释以下关于异常的内容:
本文旨在对NoSuchBeanDefinitionException使用Spring的应用程序中出现的问题进行全面的问答.
我找到了一个例子,其中按钮被添加到面板(实例JPanel),然后面板被添加到容器(由其生成的实例getContentPane()),然后容器被构造包括在JFrame(窗口)中.
我尝试了两件事:
我摆脱了容器.更详细地说,我向面板(实例JPanel)添加了按钮,然后我将面板添加到了窗口(实例JFrame).它工作正常.
我摆脱了面板.更详细地说,我直接将按钮添加到容器中,然后将容器添加到窗口(实例JFrame).
所以,我不明白两件事.
为什么我们有两个竞争机制来做同样的事情?
将容器与面板(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) 我正在寻找一种存储我的对象的方法,似乎最好的方法是使用代理.我在互联网上找到了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?
我刚看到一个这样的成员函数:
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)
所以我很困惑如何解释这个.我知道当某些东西返回一个对象或一个原语时它意味着什么.但是返回界面意味着什么?如何使用此函数的返回值?
我有这个界面:
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 !!!!!!!!!!!!!").
这里发生了什么?
我见过很多次这样的代码:
List<String> list = new ArrayList<String>();
为什么人们采用ArrayList(和其他类)的父代替生成对象的类型?
这会降低性能吗?或者为什么有人这样做?
我正在阅读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)
我没有得到它.即使我会直接创建子类的对象.当我添加新的子类时,我仍然不需要在任何地方更改我的代码.使用超类如何使我免于对其余代码进行额外更改?
假设我有一个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).
而在这种特殊情况下的名称Connection为class和trait更适合.
或者我在Scala的命名约定中遗漏了什么?
java ×7
interface ×2
oop ×2
spring ×2
abstract ×1
arraylist ×1
collections ×1
jframe ×1
jpanel ×1
list ×1
polymorphism ×1
scala ×1
spring-mvc ×1
swing ×1