我有一个调用外部 API 的 Java 程序(RealApi在下面的代码中),有时我想避免调用这个 API,而是返回预先构造的响应(由 生成FakeApi)。
所以,我最终在我的大多数方法中复制了这种结构:
public Type1 m1(String s) {
try {
Type1 r = FakeApi.m1(s);
if (r != null) {
return r;
}
} catch (Exception e) {
// log error
}
return RealApi.m1(s);
}
Run Code Online (Sandbox Code Playgroud)
有哪些选项可以避免在任何地方复制这个 try/catch 块?重要的是,如果FakeApi抛出异常或返回 null,则RealApi必须调用 。
我最近开始重构一些遗留代码并遇到两个用于绘制坐标网格的函数,问题是这些函数只在它们处理的正交变量上有所不同,就像那样
void DrawScaleX(HDC dc, int step, int x0, int x1, int y0, int y1)
{
for(int x = x0; x < x1; x += step)
{
MoveToEx(dc, x, y0, NULL);
LineTo(dc, x, y1);
}
}
void DrawScaleY(HDC dc, int step, int x0, int x1, int y0, int y1)
{
for(int y = y0; y < y1; y += step)
{
MoveToEx(dc, x0, y, NULL);
LineTo(dc, x1, y);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我决定添加一些奇特的东西,比如抗锯齿,或者只是改变绘图铅笔或者我必须在两者中放置相同的代码并且它的代码重复而且它很糟糕我们都知道原因.
我的问题是你如何将这两个函数重写为一个函数以避免这个问题?
我在项目中有多个类,除了类的名称之外完全相同.基本上,它们代表在运行时从配置文件加载的美化枚举.这些类看起来像这样:
public class ClassName : IEquatable<ClassName> {
public ClassName(string description) {
Description = description;
}
public override bool Equals(object obj) {
return obj != null &&
typeof(ClassName).IsAssignableFrom(obj.GetType()) &&
Equals((ClassName)obj);
}
public bool Equals(ClassName other) {
return other != null &&
Description.Equals(other.Description);
}
public override int GetHashCode() {
return Description.GetHashCode();
}
public override string ToString() {
return Description;
}
public string Description { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
我认为没有理由复制此文件并多次更改类名.当然,有一种方法可以列出我想要的类,并自动为我创建它们.怎么样?
我已经阅读了解释C#中没有多重继承的问题/答案,我们甚至不需要它,并且它会导致太多问题.
现在,我正在开发一个项目,我不知道如何在没有多重继承的情况下执行操作,而无需重复代码.
这是情况.有一个主页和其他页面继承自主页(主页不继承)的网站.页面和母版页都在执行一些操作:自定义登录,统计,加载用户自定义设置等.目前,解决方案很糟糕,因为这些任务的源代码只是被复制了两次.
主页类继承自Page.另一方面,母版页继承自Masterpage.从逻辑上讲,从公共类继承也很棒,但它是多重继承,所以这是不可能的.
那又怎么办呢?
我想过几种方法,但不喜欢它们:
创建一个独立的类,它将从page/masterpage类中调用.所以,例如,而不是写作bool isDisplayingTips = this.CurrentUser.IsDisplayingTips,我会写bool isDisplayingTips = this.SharedObjects.CurrentUser.IsDisplayingTips.我不喜欢它,因为它写的时间更长.
创建一个"真实的"空的公共母版页,并从中继承主页和母版页.它不仅需要编写更多代码来访问母版页参数,而且还会减慢速度,每次请求都需要额外的母版页.
任何的想法?
c# asp.net master-pages code-duplication multiple-inheritance
我有一个定义的框适用于我的大部分网站:
.searchBox
{
width: 610px;
height: 170px;
padding: 15px 55px 5px 15px;
background: url('../images/advanced_search_BG.jpg') no-repeat;
margin-top: 10px;
}
Run Code Online (Sandbox Code Playgroud)
但我有一个盒子需要更大一些; 它必须是height: 220px.
我知道我可以复制上面的内容,称之为,比方说searchBoxLarge,把它放在我的div标签上,然后完成.但这是我不想要的重复代码.
这可能是一个"愚蠢的问题",但我没有接受CSS培训并寻求帮助......
指定searchBoxLargewith 的格式是什么height: 220px,但没有重复整个searchBox条目?
我坚持如何减少代码重复,我使用TextToSpeech引擎并使用语言环境,以便用户可以选择他们的语言.
language 是一个旋转器.
language.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View arg1,
int pos, long id) {
System.out.println(parent.getItemAtPosition(pos).toString());
if (parent.getItemAtPosition(pos).toString().equals("UK")) {
textToSpeech = new TextToSpeech(MainActivity.this,
new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status != TextToSpeech.ERROR) {
textToSpeech.setLanguage(Locale.UK);
}
}
});
} else if (parent.getItemAtPosition(pos).toString()
.equals("US")) {
textToSpeech = new TextToSpeech(MainActivity.this,
new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status != TextToSpeech.ERROR) {
textToSpeech.setLanguage(Locale.US);
}
}
});
} else if (parent.getItemAtPosition(pos).toString()
.equals("French")) {
textToSpeech = new …Run Code Online (Sandbox Code Playgroud) 我有一个问题,我希望有人可以阐明......
我有一个数组散列和一个普通数组,具体取决于具体情况(即用户在程序运行时选择的选项),只定义其中一个.
用于演示问题的示例代码:
my %hashofarrays;
my @array;
#...
#Some code between here where either %hashofarrays or @array gets defined
#...
if (defined @array) {
foreach my $var1 (@array) {
print "var1 is: $var1\n";
call_subroutine($var1);
print "Something else is printed";
call_anothersubroutine($var1);
call_differentsubroutine($var1);
}
}
if (defined %hashofarrays) {
foreach my $key (keys %hashofarrays) {
print "the key is: $key\n";
foreach my $var1 (@{$hashofarrays{$key}}) {
call_subroutine($var1);
print "Something else is printed";
call_anothersubroutine($var1);
call_differentsubroutine($var1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在上面的代码中所看到的,取决于是否@array已定义或是否%hashofarrays已定义,它将运行相应的if …
我正在尝试避免管理表单和常规用户表单之间的代码重复相同的资源.
我希望能够通过以下方式使用一种形式:
<% if current_user.admin? %>
<%= form_for([:admin,@post], :html => {class: "form"}) do |f| %>
<% else %>
<%= form_for @post, html: { class: 'form' } do |f| %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
然后包括只有管理员应该通过表单正文中的语句看到的字段.
我认为这种方法不起作用,因为<%end%>正在结束表单.
有没有办法做到这一点?这种方法是否有意义?
谢谢!
我有一个接口,我希望枚举实现它,但有些方法是相同的,它会导致代码重复.我会使用抽象类而不是接口,但java不允许枚举扩展任何东西.有没有解决的办法?我包含一些代码来帮助理解问题.
public interface CommandI {
boolean isCommand(String command);
void execute(Drawer drawer, Creature creature);
String getDescription();
}
public enum Command2 implements CommandI {
FORWARD{
private String description = "qwersadd";
private String[] aliases = {"fd", "forward"};
@Override
public boolean isCommand(String command) {
for (String s: aliases){
if (s.equals(command)){
return true;
}
}
return false;
}
@Override
public void execute(Drawer drawer, Creature creature) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getDescription() {
return description;
}
},
PENUP{
private String description …Run Code Online (Sandbox Code Playgroud) 我有很多if和else语句,我想知道如何让它简短而甜蜜.此函数检查用户在文本框中输入的答案是否与(隐藏)数据网格中的答案相同.如果它是相同的添加1到correctAnswer - 它计算用户有多少正确的答案(反之亦然,错误答案)
bool firstAnswerCorrect = CheckAnswer(dataGridView1.Rows[0], textBoxQ1);
if (firstAnswerCorrect == true)
{
label1.Text = "correct";
correctAnswers = correctAnswers + 1;
}
else
{
label1.Text = "incorrect";
wrongAnswers = wrongAnswers + 1;
}
bool secondAnswerCorrect = CheckAnswer(dataGridView1.Rows[1], textBoxQ2);
if (firstAnswerCorrect == true)
{
label2.Text = "correct";
correctAnswers = correctAnswers + 1;
}
else
{
label2.Text = "incorrect";
wrongAnswers = wrongAnswers + 1;
}
bool thirdAnswerCorrect = CheckAnswer(dataGridView1.Rows[2], textBoxQ3);
if (thirdAnswerCorrect == true)
{
label3.Text = "correct";
correctAnswers = correctAnswers + …Run Code Online (Sandbox Code Playgroud) code-duplication ×10
c# ×3
java ×3
.net ×1
android ×1
asp.net ×1
c++ ×1
css ×1
enums ×1
foreach ×1
forms ×1
html ×1
master-pages ×1
optimization ×1
perl ×1
ruby ×1
stylesheet ×1