这是一个关于编码风格和推荐做法的问题:
正如在问题的答案中解释的那样,在构造函数中放置super()是不必要的?,如果你为一个应该使用超类中的默认(no-arg)构造函数的类编写构造函数,你可以super()在构造函数的开头调用:
public MyClass(int parm){
super(); // leaving this out makes no difference
// do stuff...
}
Run Code Online (Sandbox Code Playgroud)
但你也可以省略通话; 在两种情况下,编译器都会像super()调用一样.
那么,你是否将呼叫置于你的构造函数中?
一方面,人们可能会争辩说,包括super()使事情更明确.OTOH,我总是不喜欢编写冗余代码,所以我个人倾向于将其删除; 然而,我经常在其他人的代码中看到它.
你有什么经历?你有一种或另一种方法有问题吗?您是否有规定一种方法的编码指南?
BTW:相关问题(仅供参考):
Cppcheck(版本1.46.1)为这样的枚举提供以下警告:
enum DATABASE_TYPE
{
DATABASE_TYPE_UNKNOWN = -1, // <- line of warning
DATABASE_TYPE_ORACLE,
DATABASE_TYPE_MSACCESS
};
Run Code Online (Sandbox Code Playgroud)
冗余代码:找到一个以数字常量开头的语句
我不认为,这是多余的.能够做这样的事情是非常重要的.
这是cppcheck的错误还是我没有看到什么?
我设法把它归结为一个最小的例子.cppcheck有两个(进一步的)错误,这看起来像我的减少没有任何影响.
有5个文件:a.h,a.cpp,b.h,b.cpp并inc.h具有以下内容.
VC9在没有警告的情况下编译它(警告级别4).
// a.h
#pragma once
#include "inc.h"
// a.cpp
#include "a.h"
#include "b.h"
int main()
{
return 0;
}
// b.h
#pragma once
#include "inc.h"
// b.cpp
#include "b.h"
//inc.h
#pragma once
enum MY_ENUM_TYPE
{
INVALID_VALUE = -1,
FIRST_VALUE,
SECOND_VALUE
};
Run Code Online (Sandbox Code Playgroud)
所以到现在为止,我非常有信心这是一个cppcheck的错误.任何不同意见?
NLog允许我用来SplitGroup将我的消息记录到多个目标.我想使用此功能一次将每条消息记录到常见的,特定于用户和日期的日志中:
<variable name="commonLog" value="${logDir}\Common.log" />
<variable name="username" value="${identity:fSNormalize=true:authType=false:isAuthenticated=false}" />
<variable name="userLog" value="${logDir}\ByUser\${username}.log" />
<variable name="dateLog" value="${logDir}\ByDate\${shortdate}.log" />
<target name="logFiles" xsi:type="SplitGroup">
<target xsi:type="File" fileName="${commonLog}" layout="${myLayout}" />
<target xsi:type="File" fileName="${userLog}" layout="${myLayout}" />
<target xsi:type="File" fileName="${dateLog}" layout="${myLayout}" />
</target>
Run Code Online (Sandbox Code Playgroud)
这很好,但我也想对不同级别的严重性使用不同的布局.例如,errorLayout将包含异常信息和插入[!]标记,以便稍后可以突出显示BareTail等日志查看器中的错误:
<variable name="stamp" value="${date} ${username} ${logger}" />
<variable name="debugLayout" value="${stamp} ... ${message}" />
<variable name="infoLayout" value="${stamp} [i] ${message}" />
<variable name="warnLayout" value="${stamp} [!] ${message}" />
<variable name="errorLayout"
value="${warnLayout}${newline}${pad:padding=10:inner=${exception:format=ToString}}" />
<!-- …Run Code Online (Sandbox Code Playgroud) 我目前正在阅读有关分布式系统的信息,我面临着两个以类似方式描述的不同术语:复制和冗余。
谁能部分解释每个术语?
我有这个想法:
在每个服务器(他们全部都设置相同)
我将负载均衡器放在服务器前面,并在主负载均衡器出现故障时更换负载均衡器.
我使用Terracotta在服务器之间复制会话信息.如果服务器出现故障,用户应该能够在另一台服务器上继续工作,理想情况就好像什么都没发生一样.剩下的"解决"(因为我实际上没有对此进行过测试,例如不知道我应该使用什么作为负载均衡器)是需要的数据库复制.
如果用户与应用程序交互并且数据库发生更改,则必须将该更改复制到其他服务器计算机上的数据库服务器.我应该怎么做呢?我应该使用MySQL PostgreSQL还是其他东西(理想情况下,由于预算有限,它们是免费的)?上面的其他事情听起来合理吗?
澄清:我集群首先获得高可用性,我希望能够添加服务器并同时使用它们以获得高可扩展性.
我最近开始使用Python 2.6 for Ubuntu Server admin,并且有两个关于冗余的小问题:
首先是进口:它们看起来都像
从类导入类
from class import Class
Run Code Online (Sandbox Code Playgroud)
第二件事是__init__方法:
__init__(self,arg1,...,argn):
self.arg1 = arg1
...
self.argn = argn
Run Code Online (Sandbox Code Playgroud)
有没有办法避免这些重复?
我有以下Node.js目录结构.
|--app/
|--app.js
|--routers/
|--index.js/
|--models/
|--schemas.js
|--post.js
Run Code Online (Sandbox Code Playgroud)
在app.js中,有一条线就像这样mongoose.connect('mongodb://localhost/' + config.DB_NAME);.在schema.js中:
var mongoose = require('mongoose')
, Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;
var PostSchema = new Schema({
title: String
, author: String
, body: String
, creataAt: {
type: Date
, default: Date.now
}
});
// other schemas goes here
module.exports.PostSchema = PostSchema;
Run Code Online (Sandbox Code Playgroud)
在post.js中:
var mongoose = require('mongoose')
, PostSchema = require('./schemas').PostSchema
, PostModel = mongoose.model('Post', PostSchema);
module.exports = PostModel;
Run Code Online (Sandbox Code Playgroud)
在 …
我正在进行坦克游戏,为了避免冗余,我正在进行课程扩展.我的MenuPanel看起来像这个atm(我只编写了对问题很重要的代码)(knop = dutch for button)
public class MenuPanel extends JPanel implements ActionListener
{
private JButton playKnop, highScoreKnop, quitKnop, HTPKnop;
private ImageIcon play, HS, quit, HTP;
private Tanks mainVenster;
public MenuPanel(Tanks mainVenster)
{
this.mainVenster = mainVenster;
this.setLayout(null);
int x = 95;
int width = 200;
int height = 50;
play = new ImageIcon(PlayPanel.class.getResource(/buttons/PLAY.png));
playKnop = new JButton(play);
playKnop.setBounds(x, y, width, height);
playKnop.addActionListener(this);
HS = new ImageIcon(PlayPanel.class.getResource(/buttons/HS.png));
highScoreKnop = new JButton(HS);
highScoreKnop.setBounds(x, 460, width, height);
highScoreKnop.addActionListener(this);
HTP = new ImageIcon(PlayPanel.class.getResource(/buttons/HTP.png));
HTPKnop = …Run Code Online (Sandbox Code Playgroud) 我有一个表单上有几个按钮,标签和其他东西,但设计师似乎记得以前被删除的那个表单的旧元素.
无论如何都要"刷新"form.Designer.cs代码,以告知它当前在表单上的元素以及哪些元素不是.
为此提供帮助;)
以下联接应该为具有特定状态的用户检索用户信息及其消息:
SELECT * FROM user, message WHERE message.user_id=user.id AND user.status=1
Run Code Online (Sandbox Code Playgroud)
问题是结果集中某个用户的所有行都包含重复有关该用户的相同数据的冗余列(从用户表中检索的那些字段),只有来自消息表的字段包含非冗余信息.像这样的东西:
user.id username email message.id subject
1 jane jane@gmail.com 120 Notification
1 jane jane@gmail.com 122 Re:Hello
1 jane jane@gmail.com 125 Quotation
2 john john@yahoo.com 127 Hi jane
2 john john@yahoo.com 128 Fix thiss
2 john john@yahoo.com 129 Ok
3 jim jim@msn.com 140 Re:Re:Quotation
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,许多数据都是冗余的,我们不希望先找到用户,然后在循环结构或类似的东西中查看他们的消息.应不惜一切代价避免导致微查询的循环.
我不关心我的程序输出,在UI中处理得很好.我想也许通过返回此查询的结果产生的网络流量可能会大大减少,如果我能够设法消除与该用户相关的所有行中的用户数据的重复.