我试图实现一个具有通用参数化类型的内部类.
这是我的代码的简短版本:
public class AVLTree<T extends Comparable<? super T>> implements Iterable<T> {
...
private class BinaryNode<T extends Comparable<? super T>> {
...
}
private class TreePreOrderIterator<E extends Comparable<? super E>> implements Iterator<E> {
...
}
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的.Eclipse/Java给我一个警告,T内部类的类型参数是"隐藏"超类的参数.有关如何解决此问题的任何想法?
编辑:我添加了另一个我遇到问题的内部类:TreePreOrderIterator.通用型T将是相同的AVLTree,BinaryNode和TreePreOrderIterator.内部类需要访问AVLTree中的字段.
EDIT2:此外,Iterator访问a BinaryNode<T>,这是一个冲突.
(注意:这是我正在为一堂课做的更大项目的一部分.如果需要任何其他信息,请询问.)
Google为Android编写测试提供了新的类,尤其是使用jUnit 4:https://developer.android.com/tools/testing-support-library/index.html
我想知道是否可以使用来自jUnit的AndroidJUnit4运行器以及参数化运行器?
我正在使用jUnit来管理访问数据库的应用程序的集成测试.因为设置测试数据是一项耗时的操作,所以我在@BeforeClass方法中一直这样做,每个测试类只执行一次(与@Before每个测试方法运行一次的方法相反).
现在我想尝试一些不同的排列来配置数据层,在每个不同的配置上运行我的所有测试.这似乎是Parameterized测试跑步者的自然使用.问题是,Parameterized为类构造函数提供参数,该@BeforeClass方法是抽象的,并在类构造函数之前调用.
几个问题,
是否Parameterized调用@BeforeClass的参数的每个排列方法,还是只调用一次?
如果@BeforeClass重复调用该方法,是否有某种方法可以从内部访问参数值?
如果不是这些,人们认为什么是解决这个问题的最佳替代方法?
String[] boxOptions = {"1","2","4","8","16","20","40","100","400"};
JComboBox box = new JComboBox(boxOptions);
Run Code Online (Sandbox Code Playgroud)
我以前在我的程序中有这些确切的代码行,并没有收到此错误.我做了一些搜索,我发现的结果有点过头了.有任何想法吗?
错误是:
JComboBox is a raw type. References to generic type JComboBox<E> should be parameterized
Run Code Online (Sandbox Code Playgroud) 我想知道,除了语法差异,何时会使用通用接口而不是接受通用参数的方法?
public interface Flight<T>{
void fly(T obj);
}
Run Code Online (Sandbox Code Playgroud)
过度
public interface Flight{
void <T> fly(T obj);
}
Run Code Online (Sandbox Code Playgroud) 使用抽象类,我想定义一个为子类返回"this"的方法:
public abstract class Foo {
...
public <T extends Foo> T eat(String eatCake) {
...
return this;
}
}
public class CakeEater extends Foo {}
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
CakeEater phil = new CakeEater();
phil.eat("wacky cake").eat("chocolate cake").eat("banana bread");
Run Code Online (Sandbox Code Playgroud)
可以说香蕉面包会抛出IllegalArgumentException,并带有"Not a cake!"的消息.
在JUnit4中,您可以通过在一个方法中提供参数集合来编写参数化单元测试,该方法将被传递给测试的构造函数并在另一个方法中进行测试.如果我有一个我希望抛出异常的参数,我该如何指定?
我尝试在Android Studio中运行参数化单元测试,如下所示.
import android.test.suitebuilder.annotation.SmallTest;
import junit.framework.TestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
import java.util.Arrays;
import java.util.Collection;
@RunWith(Parameterized.class)
@SmallTest
public class FibonacciTest extends TestCase {
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{0, 0}, {1, 1}, {2, 1}, {3, 2}, {4, 3}, {5, 5}, {6, 8}
});
}
@Parameter // first data value (0) is default
public /* NOT private */ int fInput;
@Parameter(value = 1)
public /* NOT private */ int …Run Code Online (Sandbox Code Playgroud) android unit-testing parameterized parameterized-unit-test android-studio
我只是遇到了一个奇怪的事情...我们网站上有一些代码正在处理一个巨大的SQL语句,通过执行一些搜索来修改代码并根据某些用户值进行替换,然后将其传递给SQL Server一个问题.
我认为这将作为存储过程的参数化查询更清晰,用户值作为参数,但当我仔细观察时,我明白为什么他们可能会这样做...他们从中选择的表是可变地依赖于那些用户值.
例如,在一种情况下,如果值为("FOO","BAR"),则查询最终会变为"SELECT*FROM FOO_BAR"
有一个简单明了的方法吗?我正在尝试的一切似乎都不优雅.
编辑:当然,我可以动态生成存储过程中的sql,并执行(bleh),但那时我想知道我是否获得了任何东西.
EDIT2:以一种聪明的方式重构表名,比如将它们全部放在一个表中,不同的名称作为新列将是一个很好的方法来解决所有这些,这是几个人直接指出或暗示的.可悲的是,在这种情况下,它不是一种选择.
在C#应用程序中,我通过创建带参数的查询字符串来构建查询,然后添加参数及其值的命令.例如:
string query = "UPDATE USERS u SET u.username = @PARM_USERNAME " +
"WHERE u.id = @PARM_USERID ";
command.Parameters.AddWithValue("@PARM_USERNAME", user.username);
command.Parameters.AddWithValue("@PARM_USERID", user.id);
command.Connection.Open();
int res = command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
看看带有参数的查询是否有用,这在C#/ Visual Studio中是否可行?我可以查看command.CommandText,但它只显示与上面查询相同的内容,其中包含参数占位符.如果它有帮助,这是针对MySQL的.
parameterized ×10
java ×5
generics ×4
junit ×3
android ×2
junit4 ×2
unit-testing ×2
.net ×1
c# ×1
interface ×1
methods ×1
mysql ×1
return-type ×1
sql ×1
sql-server ×1
subclass ×1
type-safety ×1