我注意到我可以扩展一个类,同时将参数传递给扩展类:
scala> class SomeClass(val str: String)
defined class SomeClass
scala> class SubclassOne extends SomeClass("one")
defined class SubclassOne
scala> class SubclassTwo extends SomeClass("two")
defined class SubclassTwo
scala> val obj : SomeClass = new SubclassOne
obj: SomeClass = SubclassOne@2dca4eb4
scala> obj.str
res0: String = one
Run Code Online (Sandbox Code Playgroud)
我正在使用案例类,其中ClassName(args)实际上创建了一个对象,所以对我来说,它看起来像是在扩展一个对象,但我不确定这里.
它是否意味着我正在扩展类,并自动将参数传递给超级构造函数?
我有一个字符串
"This is a big sentence . ! ? ! but I have to remove the space ."
Run Code Online (Sandbox Code Playgroud)
在这句话中,我想删除标点符号之前的所有空格,并且应该成为
"This is a big sentence.!?! but I have to remove the space."
Run Code Online (Sandbox Code Playgroud)
我试图使用"\p{Punct}"但不能替换字符串.
我正在我的应用程序中创建一个文件,我一直在写一些内容到这个文件.
但是在我的文件达到某个大小后,让我说100行,我想删除第一行并将新行写到底部.
要求是我的文件应该是有限的,但它应该保留我写入文件的最新内容.
请告诉我它是否可以在Java中使用?如果有任何替代方法,请告诉我.
我对此感到有点困惑,而我在这里浏览建议的答案并没有产生在我的上下文中起作用的直接结果.
我的问题是基本的.让我们假设我有一个像这样的方法.
private int someFunction(int x, int y){
return (x+y+5)
}
Run Code Online (Sandbox Code Playgroud)
但是我想从main调用这个函数(public static void main(String args[]) ).我该怎么做呢?
如果有一个教程,你认为在这种情况下会帮助我,我也会非常感激.
如果我有这样的方法
private void setStringList(List<String> aList) { ... }
Run Code Online (Sandbox Code Playgroud)
那么这显然是可能的
private void testOnly() {
List<String> myDummyList = new ArrayList<String>();
myDummyList.add("someValue");
setStringList(myDummyList);
}
Run Code Online (Sandbox Code Playgroud)
但有没有办法让它不那么冗长
private void testOnly2() {
setStringList(new ArrayList<String>().add("someValue"));
}
Run Code Online (Sandbox Code Playgroud)
我知道上面是编译错误,但只是为了展示我想要实现的目的,只是为了减少冗长.
我知道在动态绑定的情况下,只能调用当前类中存在的那些方法.如果子覆盖父方法,则执行子方法,否则将执行parent方法...
但是在接口的情况下发生了什么,我不知道......这是我的意思的一个例子:
interface TestInterface {
public void show();
}
class Test implements TestInterface {
public void show() {
System.out.println("Hello in show");
}
public String toString() {
System.out.println("Hello in To String");
return "";
}
public static void main(String[] args) {
TestInterface obj = new Test();
obj.show();
obj.toString(); // why it run vilate dynamic binding rule..
}
}
Run Code Online (Sandbox Code Playgroud) 我被告知从不使用==字符串而是用于其他所有内容,因为它.equals会比较值而不是对象的实例.(我理解其中的区别).
根据一些网站,==比较内存位置?
我不明白的是,如果你将一个整数与另一个整数进行比较,为什么它会比较内存位置,还是仅仅用于字符串?
如果你将int 3与int 4进行比较,显然它不会在同一个内存位置,但是如果你将int 4与int 4进行比较,那是否意味着所有值为4的整数都存储在同一个内存中记忆位置?
目前我在做
import org.easymock.EasyMock;
...
foo.bar(EasyMock.<List<String>>anyObject());
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法避免提及课程EasyMock.我有这样的想法:
import static org.easymock.EasyMock.anyObject;
...
foo.bar(anyObject<List<String>>());
Run Code Online (Sandbox Code Playgroud)
然而,这不编译.还有其他办法吗?
我遇到以下情况:
我的Analyzer类型大致如下
interface Analyzer {
int computeValue();
String performAnalysis();
}
Run Code Online (Sandbox Code Playgroud)
通过类似的东西实现
class AnalyzerImpl implements Analyzer {
@Override
public int computeValue() {
return 5;
}
@Override
public String performAnalysis() {
return "Result: " + computeValue();
}
}
Run Code Online (Sandbox Code Playgroud)
(在我的实际代码中,performAnalysis使用几种不同computeValue复杂性的方法执行许多计算.)
现在我需要Analyzer在运行时有选择地调整对象的行为(或者使用调整行为创建一个包装器).
我添加了调整方法:
public Analyzer tweakAnalyzer(Analyzer untweakedAnalyzer) { ... }
Run Code Online (Sandbox Code Playgroud)
并尝试使用装饰器模式解决它:
class AnalyzerDecorator implements Analyzer {
Analyzer delegate;
public AnalyzerDecorator(Analyzer delegate) {
this.delegate = delegate;
}
@Override
public int computeValue() {
return …Run Code Online (Sandbox Code Playgroud)